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

为何数组列表存在重复元素时我的代码有时不返回true?

排查生日列表重复判断代码的问题

我正在完成一项编程作业,需求是判断给定的、用整数存储日期的生日列表是否存在重复,返回布尔值。我写了几种不同的方法来实现,但部分方法有时候没法正常工作,我不知道问题出在哪。希望有人能帮我排查问题,或者确认是不是我用的编程平台有bug。谢谢!

我的代码如下:

birthdays = merge(birthdays);//this is a merge sort that sorts the ArrayList(it does actually work)
for(int i = 0; i<birthdays.size()-1; i++)
    {
    if(birthdays.get(i) == birthdays.get(i+1))
        {
            return true;
        }
    }
return false;

可能的问题排查点:

  • ==比较的坑:如果你的birthdays是ArrayList<Integer>(包装类),用==比较两个元素会出问题。因为Integer是对象,==对比的是对象引用而非实际数值。当整数超出-128到127的范围时,自动装箱生成的是不同的对象,哪怕数值相同,==也会返回false,导致漏判重复。建议换成birthdays.get(i).equals(birthdays.get(i+1)),或者拆箱成基本类型比较:birthdays.get(i).intValue() == birthdays.get(i+1).intValue()。
  • 排序逻辑的隐性问题:虽然你说merge排序能工作,但可以手动验证几个测试用例,比如包含重复元素的列表排序后,重复项是否真的相邻。比如输入[20230101, 20221231, 20230101],排序后应该是[20221231, 20230101, 20230101],如果排序结果不符合,那就是排序函数的问题。
  • 边界测试用例:检查空列表、单元素列表、所有元素都重复的列表这些极端情况,看代码是否能正确返回结果。比如空列表应该返回false,全重复列表应该返回true。

先优先排查上面的代码问题,尤其是==的使用,这是Java包装类比较的常见错误。如果修正后还是出现异常,再考虑是否是编程平台的bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 13:25:08