[英]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;
因此,數組長度必須為3 ( N-1 )。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.