2013-11-27 110 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作爲參數,可以使代碼更好。但是這也會起作用,只是這不是編寫代碼的最佳方式。

相關問題