使用最低数量的硬币更改总价值,同时排除特定硬币,并以String

问题描述

我遇到一项作业的问题,其中一小部分作业是针对以下描述的编写方法

采用两个值的方法;要交换的值以及要排除的硬币类型,然后返回将交换为总值所需的最小硬币,并以String形式返回输出。例如changeCalculator(555,50)可能会返回“要交换的硬币是:2 x 200p,1 x 100p,0x50、2 x 20p,1 x 10p,其余为5p”。

我能够编写代码,但是编写的代码在循环中具有System.out.print,并且由于使用循环,我无法在返回字符串类型的同时使代码正常工作。

您需要了解的所有代码,是在我放置的代码类的开始处,并且已经初始化了构造函数中的硬币列表:

private List<Integer> coinList = new ArrayList<Integer>();

以下是我的代码

public void changeCalaculator (int totalCoinValue,int excludedCoinType)
{
    System.out.print("The coins exchanged are: ");
    for (int coin : coinList)
    {
        if (excludedCoinType == coin)
        {
            continue;
        }
        else
        {

        System.out.print(totalCoinValue/coin + " x " + coin + "p,");       
        totalCoinValue = totalCoinValue%coin;
        }   
    } 
    System.out.print(" with a reminader of " + totalCoinValue + "p"); 
}

解决方法

  • 要让您的方法返回String,首先需要更改您的方法声明,以表明该方法实际上确实具有返回类型。
  • 此外,与其打印输出结果,还不如直接构建一个String,并在方法完成后返回它。在以下示例中,我为此任务使用了StringBuilder
  • 最后,添加排除的硬币类型时,您缺少分支的输出。 (这里不需要continue;,因为一旦if分支为true,循环中就不需要做其他事情了。)

更新示例:

public String multiCoinCalulator(int totalCoinValue,int excludedCoinType) {
    StringBuilder sb = new StringBuilder();
    sb.append("The coins exchanged are: ");
    for (int coin : coinList) {
        if (excludedCoinType == coin) {
            sb.append(0 + " x " + coin + "p,");
        } else {
            sb.append(totalCoinValue / coin + " x " + coin + "p,");
            totalCoinValue = totalCoinValue % coin;
        }
    }
    sb.append(" with a remainder of " + totalCoinValue + "p");
    return sb.toString();
}