逆天BUG记录 —— 永远都有符合条件的元素

博主在调试Java程序时发现一个离谱的BUG。代码将符合条件元素放入结果集合,却用接收元素的变量判断是否有符合条件元素。就像工人检查工件,判断有无损坏工件应看损坏篮,代码却看手中工件,导致判断逻辑有误,结果有偏差。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在工作中交接到了新业务,在调试程序的过程中发现了很多BUG,这里记录一下其中一个比较离谱好玩儿的。

相同代码逻辑的伪代码,实际逻辑要复杂很多:
//符合条件的结果集
        final ArrayList<Integer> integers = new ArrayList<>();
        //需筛选的集合,这里的集合其实是可变的,这里随便初始化了一个,他也可能全部为2
        final int[] ints = {1, 2, 1, 2, 1, 2};
        Integer integer = null;
        for (int i : ints){
            integer = i;
            //符合条件则加入结果集
            if (integer == 1){
                integers.add(i);
            }
        }
        //判断符合条件的结果是否为空(就算需筛选集合全部为2,这里也不可能为空)
        if (integer == null){
            //当结果为空时的后续处理逻辑
        }

ok,其实也不用怎么看伪代码,其实就是将符合条件的元素放入一个结果集合中而已,但是问题出现在每次都会用一个变量来接收待判断的元素,而最后直接用这个接收元素的变量来判断是否有符合条件的元素了。
第一次看到的时候,我直接???
跟同事谈起这部分代码的时候,我也是很无奈,他相当于什么呢,举个栗子!

有一家工厂,里面有一名工人负责检查工件是否损坏,每检查一个,都要把工件拿在手里,检查完后,如果是损坏的,则放入旁边的“损坏工件篮”中。
在完成了全部的检查工作后,OK,这时候要看本次检查是否有损坏的工件了,聪明的小伙伴们是不是觉得应该看一眼损坏工件篮中是否有工件呢?但是他不,他就要看看自己手里有没有拿着,我焯,他这手里肯定啥时候都拿着一个呀,检查完之后手里一定拿着最后一个,所以说这个判断逻辑是永远不可能为空的…

这个代码还离谱的运行了很久,结果也是因为几个BUG一直有偏差…
真是又好气又好笑呢…

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值