2015-10-03 64 views
0

所以基本上我想打一個算法洗牌我的數組,所有我是這樣的:線程「main」中的異常java.lang.ArrayIndexOutOfBoundsException:5什麼?

import java.util.*; 

class MixUp{ 

    public static void main(String args[]){ 

     int temp, i=0; 
     boolean flag=true; 
     int Table[] = new int[5]; 
     Scanner input = new Scanner(System.in); 

     for(i=0; i<5; i++){ 
      System.out.println("Number? : "); 
      Table[i] = input.nextInt(); 
     } 

     for(i=0; i<5; i++){ 
      System.out.printf(Table[i] + "\t"); 
     } 

     for(i=0; i<5; i++){ 
      temp = Table[i+1]; 
      Table[i+1] = Table[Table.length-i]; 
      Table[Table.length-i] = temp; 
      if(i+1 == Table.length-i) break; 
     } 

     for(i=0; i<5; i++){ 
      System.out.printf(Table[i] + "\t"); 
     } 
    } 
} 

而且它保持在線程彈出

異常「主要」 java.lang.ArrayIndexOutOfBoundsException :5 在MixUp.main(MixUp.java:17)

回答

2

你的倒數第二個循環迭代而i<5,這是很好的,但隨後嘗試訪問Table[i+1]。如果i=4這將導致試圖訪問Table[5],這當然不是一個有效的索引。

解決這個問題的一種方法是將該循環的條件更改爲i<4而不是i<5。當i = 0

+0

我改變了它,仍然,也許如果我試着用Table.length? – TheodJoan

+0

不是這不是 – TheodJoan

0
Table[Table.length-i]; 

該代碼會一直崩潰!

for(i=1; i<5; i++){ 
temp = Table[i]; 
Table[i] = Table[Table.length-i]; 
Table[Table.length-i] = temp; 
if(i+1 == Table.length-i) break; 
} 

感謝您的幫助!

+0

不應該是表格的最後一個槽位的價格,在這種情況下, 表格[Table.length-i] ==表格[5]? – TheodJoan

+0

長度= 5的數組從0到4.從表[5]不在數組中。你應該寫'Table [Table.length-i -1]' – popiandro

+0

改變它如下,仍然在Exception等例外 'for(i = 0; i <5; i ++)temp = Table [i + 1 ]。 表[i + 1] =表[Table.length-i-1]; 表[Table.length-i-1] = temp; if(i + 1 == Table.length-i-1)break; }' – TheodJoan

相關問題