2015-10-03 157 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

相关问题