You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 01:45:02