Java找零兑换硬币程序部分数值处理异常问题咨询
问题分析
- 计数变量未重置:quarters、dimes、nickels、pennies四个计数变量声明在最外层,没有在每次处理新的找零金额时重置为0,多次输入后数值会累计,导致结果错误。
- 输出逻辑位置错误:pennies赋值和结果输出的代码全部写在
change >=5的while循环内部,当输入金额小于5,或者处理完25、10面额后剩余金额小于5时,根本不会进入该循环,也就不会输出任何结果,这就是输入1-4等数值无输出的核心原因。 - pennies输出逻辑错误:输出语句中写了
pennies + pennies,会将1美分硬币的数量做加法运算后输出,比如实际剩余3个1美分,会错误输出6。 - 代码逻辑冗余:拆解硬币面额不需要用while循环反复减,直接用整数除法取商做计数、取余算剩余金额即可,运行效率更高。
修正后代码
import java.util.Scanner; public class Main{ public static void main(String[] args) { int change = 0; Scanner myObj = new Scanner(System.in); System.out.println("请输入大于0的找零金额,输入0即可退出程序:"); change = myObj.nextInt(); while (change != 0){ // 每次处理新金额前重置计数变量 int quarters = 0; int dimes = 0; int nickels = 0; int pennies = 0; quarters = change / 25; change = change % 25; dimes = change /10; change = change %10; nickels = change /5; change = change %5; pennies = change; // 统一输出结果 System.out.println("共有:" + quarters +"枚25美分硬币,"); System.out.println(dimes + "枚10美分硬币,"); System.out.println(nickels + "枚5美分硬币,"); System.out.println(pennies + "枚1美分硬币"); System.out.println("请输入大于0的找零金额,输入0即可退出程序:"); change = myObj.nextInt(); } myObj.close(); } }
内容的提问来源于stack exchange,提问作者Eduardo Alencar
相关产品推荐
相关产品推荐

