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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 12:21:33