Java精确找零(Exact Change)代码问题:避免输出值为0的币种
Java精确找零0值币种输出问题解决方案
修改思路
当前代码的核心问题是计算完每个币种的数量后直接执行输出,未过滤数量为0的情况,只需给每个输出语句增加非0判断即可实现需求,同时可修复原代码存在的单复数错误、币种拼写错误等小问题。
修改后完整代码
import java.util.Scanner; public class LabProgram { public static void main(String[] args) { Scanner scnr = new Scanner(System.in); int totalChange = scnr.nextInt(); int pennies; int nickels; int dimes; int quarters; int dollars; if(totalChange == 0) { System.out.println("No Change"); System.exit(0); } dollars = totalChange / 100; totalChange %= 100; if (dollars > 0) { System.out.println(dollars + (dollars == 1 ? " Dollar" : " Dollars")); } quarters = totalChange / 25; totalChange %= 25; if (quarters > 0) { System.out.println(quarters + (quarters == 1 ? " Quarter" : " Quarters")); } dimes = totalChange / 10; totalChange %= 10; if (dimes > 0) { System.out.println(dimes + (dimes == 1 ? " Dime" : " Dimes")); } nickels = totalChange / 5; totalChange %= 5; if (nickels > 0) { System.out.println(nickels + (nickels == 1 ? " Nickel" : " Nickels")); } pennies = totalChange; if (pennies > 0) { System.out.println(pennies + (pennies == 1 ? " Penny" : " Pennies")); } scnr.close(); } }
主要修改点
- 每个币种计算完成后新增
if (数量 > 0)判断,只有数量不为0时才执行输出,彻底解决0值币种被打印的问题 - 新增单复数适配逻辑,避免出现
1 Dimes这类不符合英文表达习惯的输出 - 修正了原代码中5美分硬币的拼写错误(原代码写为Nickles,正确拼写为Nickels)
- 简化了1美分硬币的计算逻辑,取余后剩余的金额直接就是1美分的数量,无需额外做除法和取余操作
- 补充了Scanner资源关闭逻辑,避免资源泄漏
内容的提问来源于stack exchange,提问作者Armando Guillen
相关产品推荐
相关产品推荐

