为什么我得到ArrayIndexOutOfBoundsException?

时间:2013-11-27 14:17:36

标签: java arrays int

所以当我的老师离开时我得到了这个任务,基本上我必须做一个学生项目。学生有姓名,分数和平均分。为了计算平均值,我决定将标记存储在int[]数组中。

public void addQuiz(int m)
{
    int l = (marks.length);
    marks[l] = m;
}


int[] marks = new int[8];

但是当我运行该功能时:

student.addQuiz(90);

我明白了:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 8

任何帮助?

我不确定int[8]部分是做什么的,但它出现在我所遵循的教程中,如果没有它,它会给我一个null指针。总共有8个标记,所以我只做了8个。

6 个答案:

答案 0 :(得分:8)

您无法动态地向数组添加内容。您应该使用数组列表。

Arraylist<Integer> marks = new ArrayList<Integer>();

然后在你的addQuiz方法中:

public void addQuiz(int m) {
    marks.add(m)
}

您可能还需要更改计算平均值的方法,但这应该是微不足道的,我会留给您。

答案 1 :(得分:5)

错误说明:ArrayIndexOutOfBoundsException:8

你有一个包含8个元素的数组,索引从0到7(含)。这个数组的长度为8,当你只能达到7时,你实际上是在尝试访问标记[8]。

答案 2 :(得分:4)

在Java中,Array索引从'0'开始。所以,你不能访问数组的索引等于数组的长度。如果你的数组长度是'8',那么数组的最后一个索引是'7'而不是'8'。如果您尝试访问该数组的非法索引,则抛出ArrayIndexOutOfBoundException。代码应更改为

public void addQuiz(int m)
{
    int l = (marks.length); //assuming marks is an array of length '8'
    marks[l-1] = m; //index is 7 now
}

要计算平均值,您需要总结数组的内容(假设所有值都是int值),然后除以数组的长度

int sum = 0;
int avg = 0;
for(int i=0; i<array.length;i++){
sum =sum+array[i];
}
avg = sum/array.length;

希望这能给出一个想法

答案 3 :(得分:2)

使用Arraylist<Integer>,然后您可以动态添加到列表

答案 4 :(得分:1)

此数组中没有此marks[l] = m;的索引。使用marks[l-1] = m;

答案 5 :(得分:0)

你可以在main中调用 for 循环来获得8次标记。

for(int i=0;i<8;i++)
student.addQuiz(<marks you want to enter>, i);

您可以定义addQuiz函数,如下所示

public void addQuiz(int m, int arrayIndex)
{
marks[arrayIndex] = m;
}

int [] marks = new int [8]; //这将是原样

这些都是微小的变化。您可以通过将数组标记作为参数传递给addQuiz来使代码更好。但这也可行,只是这不是编写代码的最佳方式。