2011-12-26 3 views
0

я застрял с этим домашним заданием вопрос 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 и т.д., не работают! Какие-либо предложения?

+0

вам не нужен переменный счетчик, попробуйте просто использовать «баланс» сам по себе в течение цикла, должно быть проще – Bwmat

+0

Как он стенает кратные 10? То есть, что это печатает, что он не должен печатать, или наоборот? –

ответ

1

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

Он подходит для вашего ограничения «декретируется на 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

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

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; 
      } 

     } 
3

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

while(balance != 0) { 
    System.out.println("The balance: " + balance); 
    if(balance >= 10) 
     balance -= 10; 
    else 
     balance--; 
} 
+0

Nice код. Но он забывает печатать нулевое значение. :) – MockerTim

1

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

//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); 
} 
Смежные вопросы