在已通过方法传递的数组中添加值?

时间:2014-12-03 22:41:17

标签: java

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)

3 个答案:

答案 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++)

希望这会有所帮助: - )