簡體   English   中英

Java:數組索引超出界限異常

[英]Java: Array Index Out of Bounds Exception

System.out.print("Enter an integer:  ");
Scanner sc = new Scanner(System.in);

int x = sc.nextInt();
int lArray = x - 2;
int[] newArray = new int[lArray];

System.out.println("Let's display all possible integers...");
for (int i = 0; i <= newArray.length; i++) {
    newArray[i] = i + 2;
    System.out.print(newArray[i] + " ");
}

我最近剛剛開始使用Java,但我確信如果我用另一種語言編寫類似的代碼,我會遇到同樣的問題。 這是一個應用程序的摘錄,它列出了用戶輸入之前的所有素數。

將x-2用作lArray的定義的原因是因為數組的長度將是從2到數字{2,3,4,5 ...... x}的所有整數。

我注意到了這條線

for (int i = 0; i <= newArray.length; i++) {

如果我將i <= newArray更改為i < newArray ,則代碼可以正常工作。 但是,如果x是素數,則省略用戶的輸入x,這是一個問題。

您應該使用<而不是<= in:

for (int i = 0; i <= newArray.length; i++)
                  ^^

如果foo任何陣列,的有效索引foo[0,foo.length-1]

使用foo.length作為索引將導致ArrayIndexOutofBoundsException

並且lArray包含自然數<=x但僅排除一個數字1 ,其值應為x-1而不是x-2

將數組長度更改為(x - 1) ,然后使用<條件,您已經找到了必須避免超出范圍的異常。

你需要一個比你當前使用的元素大1個元素的數組的原因是因為有(n - 1)候選者必須考慮在2和n之間,而不是(n - 2)

例如,有兩個小於或等於三個(2和3)的候選者,巧合的是,這兩個候選者恰好都是素數。

for (int i = 0; i <= newArray.length; i++) //should be <, not <=
for (int i = 0; i < newArray.length; i++)

你需要使用:

int lArray = x - 1;

並改變你的條件使用<而不是<=

在Java和C / C ++中,數組是基於ZERO的。 因此,您的N值數組將從索引0變為N-1

舉個例子: {2, 3, 4, 5... x}

您將需要N-1值來存儲所有正數,但在整數數組中存儲1 所以,如果N等於4 ,你的數組將是:

newArray[0] = 2;
newArray[1] = 3;
newArray[2] = 4;

因此,數組長度必須為3N-1 )。

暫無
暫無

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

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