2013-11-27 71 views
0

所以我在老师不在的时候完成了这项任务,基本上我必须要完成一个学生项目。学生有一个名称,标记和平均值。为了计算平均值,我决定将这些标记存储在int[]数组中。为什么我会得到ArrayIndexOutOfBoundsException?

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.

+0

Java数组不是动态大小的。 – hexafraction

+0

如果你有一个长度为8的数组,你可以访问的最后一个索引是长度为1,即7. – helpermethod

+0

对于数组中的最后一个元素,尝试l-1 –

回答

8

您不能动态地添加东西到一个数组。您应该使用数组列表来代替。

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

然后在addQuiz方法:

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

你可能还需要改变你的方法计算平均了一下,但应该是微不足道的,我会留给你。

+0

完美!有效。谢谢@turbo! – Leviathan

+0

为什么显式投射(一个新的对象)到一个'Integer'? – Sanchit

+0

@Sanchit好点,没必要 – turbo

4

在Java中,数组索引从'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 
} 

以计算平均,则需要总结数组的内容(所提供的所有的值是整型值),然后由阵列的lenght划分

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

希望这给一个想法

5

误差表示:ArrayIndexOutOfBoundsException异常:8

您有8个元素的阵列,索引为0到7(含)。这个数组的长度8,你实际上是试图访问标记[8],当你只能去到7

2

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

1

有在这个数组中没有索引marks[l] = m;。使用marks[l-1] = m;

0

您可以将此调用为循环主要用于获取标记8次。

可以定义像下面

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

INT []标记=新INT addQuiz函数; [8] //这将是原样

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

相关问题