2016-02-16 73 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並返回布爾型以用於可有可無& &匹配全部金額。