2013-09-24 114 views
-2

好吧,這是爲了在大學的實驗室。試着把用戶輸入的整數,放進一個數組並打印出來。數組越界異常?

當我嘗試編譯時,出現錯誤。

異常在線程 「主要」 java.lang.ArrayIndexOutOfBoundsException:0 在Lab3.main(Lab3.java:12)

public class Lab3 { 


public static void main(String[] args) { 


int[] First = {}; 

for(int i=0;i<First.length;i++) 
{ 
    First[i] = (int)(Math.random() *10 +1); 
    System.out.print(First[i] + " "); 
} 
for(int i=0;i<First.length;i++) 
{ 






    if (First[i]%2==0) 
    { 

     System.out.println("Even numbers are:"+First[i]); 
    } 


} 

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

    if (First[i]%2==0) 
    { 

     System.out.println("Even numbers are:"+First[i]); 
    } 



} 

for(int i=0;i<First.length;i++) 
{ 
     int temp = First[i]; 
     First[i] = First[First.length - i - 1]; 
     First[First.length - i - 1] = temp; 
     System.out.println("Reverse is:"+temp); 
} 


System.out.println("First is:"+First[0]); 
System.out.println("First is:"+First[9]); 




} 

}

+2

您初始化一個空數組(0個字段),然後嘗試訪問其第一個字段(索引0)。 – sheltem

+0

你也可以使用arrayList它更靈活 – Marc

回答

4

通過這樣做

int[] First = {}; 
// is the same as 
int[] First = new int[0]; 

你正在創建一個包含0個元素的數組。然後嘗試訪問第一個元素。

System.out.println("First is:"+First[0]); // access first element of empty array? 

由於您沒有元素,您如何訪問它們?如果你想有一個靜態集合(不調整大小)有10個元素

int[] First = new int[10]; 

創建一個數組或使用List實施有一個動態集合(可調整大小)。


Java命名約定規定變量應該以小寫字母字符開頭。使用camelCase

+1

'ArrayIndexOutOfBoundsException'不會發生在該行,因爲它受到循環保護。在'println'語句中幾乎在代碼的末尾拋出異常。 –

+0

@AlonsoDominguez對,讓我改正這一點。謝謝。 –

+0

感謝您的幫助! – Conor

2
int[] First = {}; 

初始化0長度數組。

First[0]不存在。將該長度作爲聲明的一部分或稍後提及。

First = new int[10]; //creates an array of 10 ints

注意,上面會扔在First[11]

如果您不能確定大小,你可以使用一個ArrayList,而不是相同的異常。

List<Integer> first = new ArrayList<Integer>(); 
first.add((int)Math.random() *10 +1); 
+0

感謝您的幫助! – Conor

2

您應該使用List來代替,因爲您的數組會隨時間增長。這就是爲什麼你不能訪問First [i],因爲你的數組是用一個空數組初始化的(並且會永遠保持這種狀態)。你也可以用一些元素(不是你的用例)初始化你的數組,或者使用新的初始容量來初始化你的數組。

+0

謝謝!下次會知道。 – Conor

0

您應該使用List來代替,因爲您的數組將會及時增長。