Java访问ArrayList元素出错 税后薪资计算结果不匹配问题
问题排查结论
你代码里的核心错误是循环内重复调用迭代器的next()方法,直接导致员工信息和薪资数据错位:
- 迭代器每调用一次
next(),指针就会向后移动一个元素位置 - 你第一次调用
li.next()拿到了当前位置的员工对象e(比如列表里第1个员工),紧接着第二次调用li.next()取薪资的时候,指针已经移到了下一个元素,实际拿到的是第2个员工的薪资
最终效果就是你拿A员工的工号做匹配,却用B员工的薪资算税后收入,结果必然和预期不符。如果列表元素总数是奇数,循环到最后一次时还会抛出NoSuchElementException运行时异常。
修复方法
删掉循环里多余的li.next()调用,直接从第一次取到的员工对象e上获取薪资即可,修正后的循环代码:
while (li.hasNext()){ EmployeeRecords e = li.next(); // 从当前遍历到的员工对象上直接取薪资,不要二次移动迭代器指针 salary = e.getSalary(); if (e.getEmployeeNum() == empNo) { // 匹配到目标员工时同步获取姓名,避免输出时name变量值不对 name = e.getName(); if (salary >= 20001) { tsalary = salary * 0.75; } else { tsalary = salary * 0.80; } found = true; // 匹配到后直接跳出循环,不需要继续遍历剩余元素 break; } }
其他优化提示
- 你原来的代码里输出语句用到的
name变量没有在匹配逻辑里赋值,运行时会输出之前逻辑残留的name值,和当前查询的员工对不上,上面的修复代码已经补上了这个问题 tsalary初始值设为1没有实际业务意义,因为没匹配到记录时不会走到薪资输出分支,匹配到后会被正确计算的值覆盖,改成初始值0更符合逻辑。
内容的提问来源于stack exchange,提问作者Hiiro
相关产品推荐
相关产品推荐

