Изменение общей стоимости с использованием наименьшего количества монет, исключая конкретную монету, и возвращает результат в виде строки

Я столкнулся с проблемой с одним из моих заданий, где небольшой частью задания является метод написания для приведенного ниже описания:

Метод, который принимает два значения; значение для обмена и тип монеты для исключения, а затем вернуть минимальное количество монет, необходимое для обмена на общее значение, и вернуть вывод в виде строки. Например, 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"); 
}

person ZaweeeZ    schedule 24.09.2020    source источник


Ответы (1)


  • Чтобы ваш метод возвращал String, вам сначала нужно изменить объявление метода, чтобы показать, что метод действительно имеет возвращаемый тип.
  • Кроме того, вместо того, чтобы распечатывать результаты, просто создайте строку по пути и верните ее после завершения вашего метода. В следующем примере я использовал StringBuilder для этой задачи.
  • Наконец, вы пропустили вывод из ветки при добавлении исключенного типа монеты. (Здесь вам не нужен continue;, потому что в цикле больше нечего делать, когда ветвь if верна)

Обновленный пример:

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();
}
person maloomeister    schedule 24.09.2020
comment
спасибо, но есть ли способ, которым я могу System.out.print напечатать строку sb в конце моего кода перед возвратом, просто чтобы проверить, работает ли он? - person ZaweeeZ; 24.09.2020
comment
Конечно вы можете. Или вы сохраняете возвращенную строку в локальной переменной String в методе, где вы вызываете свой multiCoinCalculator. Например. String result = multiCoinCalculator(562, 50);. Затем вы можете делать с этим результатом все, что хотите. Например. System.out.println(result) если хотите. - person maloomeister; 24.09.2020
comment
Спасибо дружище! Реально не ожидал такого быстрого решения. - person ZaweeeZ; 24.09.2020
comment
Без проблем. Если это прояснило все ваши вопросы, вы можете пометить их как решенные. - person maloomeister; 24.09.2020
comment
Новым пользователям @ZaweeeZ следует пройти тур и посетить Справочный центр, после чего вы получите значок Informed [бронзовый]. - person Abra; 27.09.2020