Возврат за цикл не работает должным образом - PullRequest
0 голосов
/ 27 декабря 2011

Я застрял с этим домашним вопросом по Java:

Напишите новый метод, «Возврат», который имитирует возврат всех оставшихся кредитов кратными 10, многократно распечатывая баланс и уменьшая его на 10 каждый раз, пока не останется менее 10 кредитов. Затем начинайте уменьшать баланс на 1 кредит несколько раз, пока печатаете на экране, пока баланс не станет равным нулю. Например, если текущий баланс равен 33 и вызывается «Возврат», вывод на экран будет выглядеть следующим образом:

Баланс: 33
Баланс: 23
Баланс: 13
Баланс: 3
Баланс: 2
Баланс: 1
Баланс: 0

Отлично работает с любым числом, кроме чисел, заканчивающихся на «0», т. Е. 10,30,100 и т. Д.

Вот мой метод возврата:

public void Refund(){
    System.out.println("You have selected the refund option:");

    for(int counter=(int)balance;counter>=10;counter-=10){
        System.out.println("Balance: £"+balance);
        balance-=10;
    }

    for(int counter=(int)balance;counter>0;counter-=1){
        System.out.println("Balance: £"+balance);
        balance-=1;
    }

    System.out.println("Balance: £"+balance);
}

По сути, единственный способ заставить его работать с 10,30 и т. Д. - это сделать

for(int counter=(int)balance-10;counter>=10;counter-=10){

в следующем для выписки (метод возврата):

for(int counter=(int)balance;counter>=10;counter-=10){
System.out.println("Balance: £"+balance);
balance-=10;
}

Однако, теперь, когда я это сделал, 10,30,100 работают, но любые другие числа, т. Е. 33,54,62 и т. Д., Не работают! Есть предложения?

Ответы [ 4 ]

3 голосов
/ 27 декабря 2011

Попробуйте что-нибудь подобное.(не проверено)

while(balance != 0) {
    System.out.println("The balance: " + balance);
    if(balance >= 10)
        balance -= 10;
    else
        balance--;
}
1 голос
/ 27 декабря 2011

Так много способов ответить на этот вопрос, вот несколько ...

//Using While loops
public void refund(int balance){
    while(balance >= 10) {
        System.out.println("Balance: £"+balance);
        balance -= 10;
    }
    while(balance >= 0) {
        System.out.println("Balance: £"+balance);
        balance -= 1;
    }
}
// another possible while loop answer and my favorite
public static void refund(int balance){
    while(balance >= 0) {
        int decrement = (balance>=10?10:1);
        System.out.println("Balance: "+balance);
        balance -= decrement;
    }
}

// Using for loops
public void refundWithForLoops(int balance){
    for(balance=balance; balance >= 10; balance -=10) {
        System.out.println("Balance: £"+balance);
    }
    for(balance=balance; balance >= 0; balance--) {
        System.out.println("Balance: £"+balance);
    }
}

// with recursion
public static void refundWithRecursion(int balance){
    int decrement = (balance>=10?10:1);
    System.out.println("Balance: £"+balance);
    if(balance > 0) refundWithRecursion(balance-decrement);
}
1 голос
/ 27 декабря 2011

Просто чтобы прояснить вопрос. Ваш метод Возврата работает нормально.

Он подходит вашему ограничению, "уменьшаясь на 10 каждый раз, пока меньше 10 оставшихся кредитов".Если вы измените ограничение на меньше или равно 10 .

Вот мой тест, который работает:

public class Main {

    public static void main(String[] args) {
        Main m = new Main();
        m.refund(33);
    }

    public void refund(float balance) {
        System.out.println("You have selected the refund option:");

        for (int counter = (int) balance; counter >= 10; counter -= 10) {
            System.out.println("Balance: £" + balance);
            balance -= 10;
        }

        for (int counter = (int) balance; counter > 0; counter -= 1) {
            System.out.println("Balance: £" + balance);
            balance -= 1;
        }

        System.out.println("Balance: £" + balance);
    }
}

У меня нетизменил тело вашего метода.

Вот вывод на входе 30:

You have selected the refund option:
Balance: £30.0
Balance: £20.0
Balance: £10.0
Balance: £0.0

И на 33:

You have selected the refund option:
Balance: £33.0
Balance: £23.0
Balance: £13.0
Balance: £3.0
Balance: £2.0
Balance: £1.0
Balance: £0.0
1 голос
/ 27 декабря 2011

Это должно работать:

int balance = 33;

        for (int counter = (int) balance; counter >= 10; counter -= 10) {
            System.out.println("Balance: £" + balance);
            balance -= 10;

            for(int c = (int) balance; c <= 10 && c>=0; c -= 1){
                System.out.println("Balance: £" + balance);
                balance -= 1;
            }

        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...