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

如何检查ArrayList是否含特定值?求排查考勤判断代码异常原因

2. 排查考勤判断代码的问题

先把你的代码贴出来方便分析:

for (int i = 0; i < records.size(); i++) { 
    JSONObject jsonObject = new JSONObject(); 
    if (Scanner.listOfBarcodes.contains(records.get(i).getsid())) { 
        jsonObject.put("attendance","Present"); 
    } else { 
        jsonObject.put("attendance","Absent"); 
    }
    // 这里是不是漏了处理jsonObject的逻辑?
}

根据经验,大概率是这几个原因导致结果不符合预期:

1. 类型不匹配

先确认 listOfBarcodes 的元素类型和 getsid() 返回的类型完全一致:

  • 如果 listOfBarcodes 是 ArrayList<Integer>,但 getsid() 返回的是 String(比如"3924"),那 contains() 会直接返回 false——整数和字符串的 equals 比较永远不相等。
  • 解决办法:统一两边的类型,要么把扫描到的ID转成 String 存到 listOfBarcodes,要么把 getsid() 的返回值转成 Integer。

2. 未处理生成的 JSONObject

你在循环里创建了 jsonObject,但之后没有把它添加到结果集合,也没有输出或做后续处理。循环结束后根本拿不到这些考勤数据,自然会觉得结果不对。比如可以加一行代码补全逻辑:

// 先定义一个JSONArray来存最终结果
JSONArray attendanceResults = new JSONArray();

for (int i = 0; i < records.size(); i++) { 
    JSONObject jsonObject = new JSONObject(); 
    if (Scanner.listOfBarcodes.contains(records.get(i).getsid())) { 
        jsonObject.put("attendance","Present"); 
    } else { 
        jsonObject.put("attendance","Absent"); 
    }
    // 把生成的对象加入结果集
    attendanceResults.put(jsonObject);
}
// 之后可以打印或返回attendanceResults查看结果

3. 静态变量 listOfBarcodes 数据异常

Scanner.listOfBarcodes 是静态变量,有没有可能扫描完成后,这个变量被其他代码修改了,或者根本没正确存入扫描到的ID?建议在循环前加一行打印,确认里面的内容:

System.out.println("扫描到的ID列表:" + Scanner.listOfBarcodes);

如果打印内容和预期不符,那问题出在扫描逻辑上,不是这段考勤判断代码。

4. 自定义对象的 equals 问题

如果 getsid() 返回的是自定义对象(不是 String/Integer 这类基本包装类型),必须确保这个对象重写了 equals() 方法,否则 contains() 无法正确匹配元素。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:30:26