为何我的Java for循环向ArrayList添加元素结果不符合预期?
问题分析:for循环添加元素到ArrayList的逻辑错误
需求说明
需要通过for循环将1到15的数字添加到ArrayList中,规则为:当数字大于10时,添加该数字的2倍,最终期望得到结果:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 22, 24, 26, 28, 30]
错误代码及运行结果
你编写的代码如下:
List<Integer> list = new ArrayList<>(); for (int i = 1; i < 16 ; i++) { if (i>10){ i*=2; } list.add(i); } System.out.println(list);
运行后得到结果:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 22]
错误原因
核心问题在于你修改了for循环的控制变量i:
- 当循环执行到
i=11时,满足i>10的条件,执行i*=2,此时i的值变为22; - 随后将22添加到列表,接着循环执行步进操作
i++,i变成23; - 此时
i<16的条件不成立,循环直接终止,导致原本需要处理的12、13、14、15这几个数完全没有进入循环逻辑,最终列表只到22就结束了。
简单来说,修改循环变量破坏了for循环的遍历节奏,让循环提前退出,没有完成1到15的完整遍历。
正确代码示例
示例一:分支判断直接添加对应值
List<Integer> list = new ArrayList<>(); for (int i = 1; i <= 15 ; i++) { if (i < 11) { list.add(i); } else { list.add(i * 2); } } System.out.println(list);
示例二:使用临时变量存储待添加值
List<Integer> list = new ArrayList<>(); for (int i = 1; i < 16; i++) { int value = i; if (i > 10) { value *= 2; } list.add(value); } System.out.println(list);
这两段代码的共同点是没有修改循环变量i,保证了循环能从1到15完整遍历每一个数字,只是在添加到列表时根据规则处理值,因此能得到正确结果。
内容的提问来源于stack exchange,提问作者Gafarli Farid
相关产品推荐
相关产品推荐

