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 = 10
和amount = 56
。在分配了数量的硬币后,应该有rs5 = 0
,rs2 = 7
和rs1 = 10
。但上面的代码没有显示正确的答案。它显示的正确是rs5 = 0
,其他的是10
。那么这段代码有什么问题呢?
答案 0 :(得分:0)
您正在使用:
qt = ((amount%5) / 2)/1;
而不是:
qt = ((amount%5) % 2)/1;
你得到的结果为:
5Rs硬币:0,2Rs硬币:10,1Rs硬币:9
(5 * 10)+(1 * 1)= 56
另一件事,你可以很容易地使用你的函数allocateseCoins并在硬币数量足够的情况下返回布尔值,并且可以使用&amp;&amp;匹配全部金额。