使用增强for循环累加数组元素时抛出数组越界异常,求助原因
问题分析与解决
嘿,我来帮你揪出这个bug的根源!先看你写的代码:
int[] array = {1,2,3}; int total = 0; for(int counter : array) { total = total + array[counter]; } System.out.println(total);
核心错误:误解了增强for循环的变量含义
增强for循环(也就是for-each循环)和普通for循环的逻辑完全不同:
- 普通for循环里的循环变量是数组的索引(从0到
array.length-1),所以array[counter]能正确获取对应位置的元素。 - 但增强for循环里的
counter是数组中的元素值本身,不是索引!
你的数组是{1,2,3},咱们一步步走一遍循环过程:
- 第一次循环:
counter被赋值为数组第一个元素1,你执行array[1]取到2,total变成0+2=2,这步没问题。 - 第二次循环:
counter变成第二个元素2,array[2]取到3,total变成2+3=5,这步也OK。 - 第三次循环:
counter变成第三个元素3,你尝试取array[3]——但你的数组只有3个元素,合法索引是0、1、2,array[3]直接超出了数组范围,自然就抛出IndexOutOfBoundsException了!
正确的增强for循环写法
既然增强for循环直接把元素值给你了,那直接累加这个值就行,根本不需要再通过索引去数组里取:
int[] array = {1,2,3}; int total = 0; for(int num : array) { total += num; // 直接用元素值累加,简单又正确 } System.out.println(total); // 输出6,结果正确
这样修改后,代码就能正常运行,得到你想要的累加结果啦。
内容的提问来源于stack exchange,提问作者Neo
相关产品推荐
相关产品推荐

