如何按员工职级计算奖金?Java代码输出奖金为0.0求助
问题分析与修复方案
嘿,我一眼就发现问题所在啦——你的salary变量从始至终都是0!难怪所有奖金输出都是0.0,咱们一步步来搞定这个问题:
核心问题
- 薪资未更新:你初始化了
int salary=0;之后,从来没从读取的文件行里提取实际的薪资值,每次计算奖金都是用0来运算,结果自然全是0.0。 - 奖金计算逻辑错误:你写的
bonus=salary/0.03是把薪资除以比例,这明显不符合奖金的计算逻辑——应该是乘以比例才对(比如职级1加3%奖金,就是薪资×0.03),不然奖金会大得离谱。 - 职级判断不准确:用
phrases.contains("1")判断职级存在误判风险,如果薪资里包含对应数字(比如薪资是12345),会错误触发职级判断。
修复步骤
- 拆分每行字段:文件每行是
姓名 薪资 职级的空格分隔格式,用split(" ")把字符串拆分为数组,提取对应字段。 - 提取并转换薪资:从拆分后的数组中拿到第二个元素(索引1),转换为数值类型赋值给
salary。 - 精准判断职级:直接提取数组第三个元素(索引2)进行判断,避免误判。
- 修正奖金计算逻辑:把除法改为乘法,符合奖金比例的计算规则。
修复后的完整代码
String phrases; int salary = 0; try { FileReader in = new FileReader("bonus.txt"); BufferedReader readFile = new BufferedReader(in); while ((phrases = readFile.readLine()) != null) { System.out.println(phrases); // 拆分每行数据为姓名、薪资、职级三个字段 String[] parts = phrases.split(" "); // 提取薪资并转换为int类型 salary = Integer.parseInt(parts[1]); double bonus; // 根据提取的职级精准判断 if(parts[2].equals("1")){ bonus = salary * 0.03; // 修正为乘以比例 System.out.println("Bonus: " + bonus); }else if(parts[2].equals("2")){ bonus = salary * 0.08; System.out.println("Bonus: " + bonus); }else if(parts[2].equals("3")){ bonus = salary * 0.20; System.out.println("Bonus: " + bonus); } } readFile.close(); in.close(); } catch (IOException e) { System.out.println("Problem reading file."); System.err.println("IOException: " + e.getMessage()); } catch (NumberFormatException e) { // 额外处理薪资格式错误的情况 System.err.println("Invalid salary format: " + e.getMessage()); }
修复后的运行输出
Jame 900000 1 Bonus: 27000.0 Jane 60000 2 Bonus: 4800.0 Don 866000 3 Bonus: 173200.0
内容的提问来源于stack exchange,提问作者user8852923
相关产品推荐
相关产品推荐

