2011-12-26 61 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

你不需要计数器变量,尽量只用“平衡”本身在for循环,应该是简单 – Bwmat 2011-12-26 20:28:03

+0

它是如何失败的倍数为:10?也就是说,它打印的是什么,它不应该打印,反之亦然? – 2011-12-26 20:30:53

回答

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

好的一段代码。但它忘记打印零值。 :) – MockerTim 2011-12-27 06:26:17

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