private void setAverage(int[] grades1) {
for(int i = 0; i <= grades1.length; i++){
avg += grades1[i];
}
System.out.println(avg);
}
由于某种原因,我收到此代码的错误说:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at StudentRecords.setAverage(StudentRecords.java:29)
at StudentRecords.<init>(StudentRecords.java:16)
at StudentRecordTest.main(StudentRecordTest.java:54)
答案 0 :(得分:3)
您必须使用<
代替<=
。在您的代码中,如果grades1
的大小为10,您将尝试在循环结束时获得grades1[10]
,而您只能从0到9。
private void setAverage(int[] grades1) {
for(int i = 0; i < grades1.length; i++){
avg += grades1[i];
}
System.out.println(avg);
}
答案 1 :(得分:0)
private void setAverage(int[] grades1) {
for(int i = 0; i < grades1.length; i++){
avg += grades1[i];
}
System.out.println(avg);
}
E.g。你有一个长度为3的数组,那么你有索引0,1,2。 你不能试图获得索引3
答案 2 :(得分:0)
您收到ArrayIndexOutOfBoundsException: 3
因为您的代码正在尝试访问数组中不存在的grades1[3]
元素。让我们仔细看看:
数组的长度为3
。这意味着您的数组从index 0
开始,到index 2
-------&gt; [0, 2]
结束。如果您计算数字0, 1, 2,
,则得3
这是长度。
现在,你的for循环逻辑已关闭。您从i = 0
开始,到i <= 3
结束。当您在for循环中访问grades1[i]
时,您将访问每个元素i
,直到条件为false。
// 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++)
希望这会有所帮助: - )