2016-02-16 46 views
-4
class CoinExchanger { 

    private int rs5, rs2, rs1; 

    public boolean canDispenseCoins(int amount){ 
     return (amount<(rs5*5 + rs2*2 + rs1))? true: false; 
    } 

    public void dispenseCoins(int amount){ 
     int qt = amount/5; 
     rs5 = (qt>rs5)?0: rs5-qt ; 

     qt = (amount%5)/2; 
     rs2 = (qt>rs2)?qt-rs2: rs2-qt ; 

     qt = ((amount%5)/2)/1; 
     rs1 = (qt>rs1)?qt-rs1: rs1-qt ; 

     out.printf("5Rs coins : %d, 2Rs coins : %d, 1Rs coins : " 
       + "%d\n", rs5, rs2, rs1); 

    } 
} 

这是硬币分配器。它要求用户输入三个整数和数量的硬币分配...为什么实例变量不会改变?

这里我输入rs5 = 10,rs2 = 10,rs1 = 10amount = 56。分配一定数量的硬币后,应该有rs5 = 0,rs2 = 7rs1 = 10。但上面的代码没有显示正确的答案。它显示正确的是rs5 = 0,其他的是10。那么这个代码有什么问题?

+4

那么您采取哪些诊断步骤来解决问题?你有没有在调试器中通过它,在每一步都观察'qt'? –

+0

什么是56%5的价值? (56%5)/ 2的价值是多少? –

+0

我想每个整数的其余部分检查是否所有56个硬币都被分配... – sai

回答

0

您正在使用:

qt = ((amount%5)/2)/1; 

相反的:

qt = ((amount%5) % 2)/1; 

随着你得到结果为:

5RS硬币:0,2RS币:10,1RS硬币:9

(5 * 10)+(1 * 1)= 56

另一件事,当硬币数量足够时,您可以轻松使用您的函数dispenseCoins并返回布尔型以用于可有可无& &匹配全部金额。