簡體   English   中英

為什么會出現ArrayIndexOutOfBoundsException?

[英]Why am I getting ArrayIndexOutOfBoundsException?

所以我在老師不在的時候得到了這份作業,基本上我必須做一個學生項目。 學生有名字,分數和平均分。 為了計算平均值,我決定將標記存儲在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。

您不能將事物動態添加到數組中。 您應該改為使用數組列表。

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

然后在您的addQuiz方法中:

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

您可能還需要更改計算平均值的方法,但這應該是微不足道的,我留給您。

錯誤消息:ArrayIndexOutOfBoundsException:8

您有一個包含8個元素的數組,索引從0到7(含0)。 該數組的長度為8,實際上您只能訪問最多7的標記[8]。

在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
}

要計算平均值,您需要對數組的內容求和(假設所有值都是int值),然后除以數組的長度

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

希望這能給我一個主意

使用Arraylist<Integer> ,然后可以動態添加到列表中

該數組中沒有該marks[l] = m;索引marks[l] = m; 使用marks[l-1] = m;

您可以在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 []標記=新的int [8]; //將保持原樣

這些是最小的更改。 通過將數組標記傳遞給addQuiz作為參數,可以使代碼更好。 但這也將起作用,只是這不是編寫代碼的最佳方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM