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
相关产品推荐
相关产品推荐

