如何检查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
相关产品推荐
相关产品推荐

