本文解析一个常见Java编程陷阱:因循环条件与判断逻辑矛盾,导致ArrayList始终为空。重点剖析for(int j=i; j
本文解析一个常见java编程陷阱:因循环条件与判断逻辑矛盾,导致arraylist始终为空。重点剖析for(int j=i; j
在您提供的代码中,ArrayList
for(int i = 0; i j) c.add(1); // 永假:i > i 不成立
if(i <h3>? 问题逐层拆解:</h3>
- 外层 i 从 0 开始遍历(假设 a.size() = 3,则 i = 0, 1, 2);
- 内层 j 每次均初始化为当前 i 的值(如 i=0 → j=0);
- 循环条件 j
- 但此时 i == j,因此 i > j 和 i 全部为 false,c.add(1) 一次都不执行;
- 随后 j++ → j = i + 1,再次判断 j
✅ 结论:该双重循环实际等价于空操作(no-op),c 始终保持初始空状态。
✅ 正确写法示例(根据常见意图推测)
若您本意是「为 a 中每个元素向 c 添加一个 1」,应简化为:
for (int i = 0; i <p>若您本意是「比较 a 和 b 对应位置元素并按规则填充 c」,则需重构逻辑,例如:</p><pre class="brush:php;toolbar:false;">for (int i = 0; i b.get(i)) {
c.add(1);
} else if (a.get(i) <h3>⚠️ 注意事项</h3>
- 避免无意义的循环边界:for (int j = i; j
- 善用调试技巧:在循环内添加 System.out.println("i=" + i + ", j=" + j); 可快速暴露变量关系异常;
- 优先使用增强for循环或Stream API:提升可读性与安全性,减少索引越界与逻辑错误风险。
通过理解循环初始化、条件判断与变量生命周期的关系,可有效规避此类“看似运行、实则静默”的隐蔽Bug。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











