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

Java嵌套循环计算薪资年度涨幅未产生预期结果问题求助

代码错误分析与修复方案

错误1:薪资计算逻辑错误

  • 全局复用同一个salary变量,不同涨薪比例的计算共用了前一个比例修改后的薪资,没有基于初始薪资独立计算
  • 涨薪计算、薪资累加逻辑放在了外层涨薪比例循环中,内层年循环未做任何计算,4年输出的涨额、薪资完全相同,没有逐年累计涨幅
  • 四舍五入运算顺序错误,Math.round((salary * (raiseRate * 0.01)) * 100 / 100) 等效于直接计算salary*0.01*raiseRate,四舍五入完全未生效

错误2:输出未格式化保留两位小数

  • 直接使用println输出double类型变量,不会自动保留两位小数,需要使用printf方法指定输出格式。

修复后完整代码

import java.util.Scanner;

public class AnnualRaise {
    public static void main(String[] args) {
        // 创建输入扫描器
        Scanner input = new Scanner(System.in);
        
        System.out.print("请输入初始薪资: ");
        double initialSalary = input.nextDouble();
        final int MAX_YEAR = 4;
        final int MAX_RAISE = 5;
        
        if (initialSalary > 0) {
            // 遍历不同涨薪比例
            for (int raiseRate = 3; raiseRate <= MAX_RAISE; raiseRate++) {
                System.out.println("涨薪比例: " + raiseRate + "%");
                // 每个比例单独用初始薪资计算,不影响其他比例
                double currentSalary = initialSalary;
                // 逐年计算
                for (int year = 1; year <= MAX_YEAR; year++) {
                    // 正确的四舍五入保留两位小数计算涨额
                    double raise = Math.round(currentSalary * raiseRate * 0.01 * 100) / 100.0;
                    currentSalary += raise;
                    // 格式化输出保留两位小数
                    System.out.printf("         第%d年: 涨额: $%.2f, 当前薪资: $%.2f%n", year, raise, currentSalary);
                }
            }
        } else {
            System.out.println("再见!");
        }
        input.close();
    }
}

内容的提问来源于stack exchange,提问作者Welt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:36:03