您得到ArrayIndexOutOfBoundsException: 3
,因为您的代码试图访问数组中不存在的grades1[3]
元素。让我们来仔细看看:
您的数组的长度是3
。这意味着您的阵列开始于index 0
并结束于index 2
------->[0, 2]
。如果您计算数字0, 1, 2,
,您会得到3
这是长度。
现在,您的for循环中的逻辑关闭。你从i = 0
开始到i <= 3
。当您在for循环中访问grades1[i]
时,您访问每个元素i
,直到条件为假。
// iteration 1
for(int i = 0; i <= grades1.length; i++){
avg += grades1[i];// accesses grades1[0]
}
-------------------------------------------------
// iteration 2
for(int i = 0; i <= grades1.length; i++){
avg += grades1[i];// accesses grades1[1]
}
-------------------------------------------------
// iteration 3
for(int i = 0; i <= grades1.length; i++){
avg += grades1[i];// accesses grades1[2]
}
-------------------------------------------------
// iteration 4
for(int i = 0; i <= grades1.length; i++){
avg += grades1[i];// tries to access grades1[3] which does not exist
}
-------------------------------------------------
有一对夫妇的方式来解决这个问题:
1. for (int i = 0; i < grades1.length; i++)
2. for (int i = 0; i <= grades1.length - 1; i++)
希望这有助于:-)
阅读此异常 – Dici 2014-12-03 22:41:57
的文档的终止语句应该比,而不是更少少用大于或等于。 – August 2014-12-03 22:42:17
为什么在这个问题上有一个倒退? – 2014-12-03 22:44:44