2013-12-10 26 views
0

你能幫我解決我的問題嗎?我需要給我的int數組添加值,但我得到的是一個ArrayIndexOutOfBoundsException將每個值添加到整數數組

public static void numberSort(){ 

    int quantity = 0; 
    int[] values = new int[quantity]; 
    int allocate = 0; 

    quantity = Integer.parseInt(JOptionPane.showInputDialog("How many values do you wish to sort? : ")); 

    for(int x = 0; x <= values.length; x++){ 
     allocate = Integer.parseInt(JOptionPane.showInputDialog("Values you want to sort : ")); 

     values[allocate] = x; 

     System.out.println(values[x]); 
    } 
+0

'int quantity = 0; int [] values = new int [quantity];'您正在創建一個大小爲0的數組 – nachokk

+0

感謝您的回答和您的考慮:D – mackenn22

+0

請考慮標記爲正確的答案,以幫助您更多:) – nachokk

回答

2
int quantity = 0;  
int[] values = new int[quantity]; 

你跟0位置,這實際上是一個零長度數組分配的數組。這意味着它確實沒有任何有效的位置,所以你不能存儲任何東西。這就是爲什麼當你嘗試在數組內存儲任何東西時你會遇到ArrayIndexOutOfBounds異常。

您必須將您分配values的行移動到後的行您讀取的行的值爲quantity

你的下一個問題是你for循環:

for(int x = 0; x <= values.length; x++) 

數組索引運行從0array.length - 1。所以通常for循環的終止條件是x < values.length。如果這是你的代碼,你不會看到這個例外。但是,即使您修復此問題以使quantity爲非零值,您在嘗試填充陣列時也會遇到異常,因爲values[array.length]超出了範圍。所以,你將有你的for循環更改爲:

for(int x = 0; x < values.length; x++) 

我還注意到,您有values[allocate] = x;。你想要的是values[x] = allocate;,因爲你想要數組的x th元素。

+1

漂亮的catch值'分配] = x' + 1:D – nachokk

2

此行是你的問題

int quantity = 0;  
int[] values = new int[quantity]; 

你正在創建與創建數組時數組的長度確定長度爲0的數組。創建後,其長度是固定的。

詳情請閱讀教程:Arrays

代碼中的速戰速決只是初始化您的數組數量

int quantity = Integer.parseInt(JOptionPane.showInputDialog("How many values do you wish to sort? : ")); 
int[] values = new int[quantity]; 

後在for循環變化<=<事業陣列開始在0

for(int x = 0; x < values.length; x++){ 
allocate = ... 
values[x] = allocate; // you want to allocate in position "x" allocate 
} 
0

除了創建長度爲0的數組之外,for for循環結束條件不正確。你寫了x <= values.length,但你應該寫x < values.length。由於Java中的數組是0索引,這意味着索引的有效範圍是0到values.length - 1.

0

我在那裏計數三個錯誤。最顯著之一:

for(int x = 0; x <= values.length; x++){ 

Java數組從零索引 - 這意味着,例如具有5length陣列有索引01234。除此之外的任何方向都會導致ArrayIndexOutOfBoundsException。由於您使用的是<=,因此您讀取的值超出允許的範圍。將其替換爲<

此外,您初始化您的數組爲零。這意味着你不能真正使用它。使用quantity初始化陣列只有一次quantity具有正確的值!

最後,我相信你想要values[x] = allocate;,反之亦然。