2016-01-20 65 views
0

我得到数组索引超出范围异常在prog的最后一行, output[1][1]在那里产生这样的异常。但在前面的循环中,同样的事情仍然正常。数组索引超出范围异常无故

{ 
    int ict=66,total_slots=12,h1=15,index_count=65; 
    String output[][] = new String[ict][total_slots+1]; 

    for (int x = 0; x < (ict); x++) 
     output[x][0] = Integer.toString(x); 
    for (int y = 0; y < (total_slots + 1); y++) 
     output[0][y] = Integer.toString(y); 
    for (int x = 1; x <= (index_count); x++) 
     for (int y = 1; y <= (total_slots); y++) 
      output[x][y] = "n"; 

    for (int x=1; x <= h1; x++) { 
     output[x][1]="y";//exception occurs here 
     limit[x]++; 
    } 
} 
+6

欢迎来到Stack Overflow。请更注意代码的格式 - 如果没有任何缩进,*真的很难理解。请阅读http://tinyurl.com/stack-hints –

+2

h1的价值是什么? – hasnae

+0

@DenysSéguret:希望我的确如此:) –

回答

1

记住,当你声明一个数组一样String output[][]=new String[5][5];然后output[4][4]是您已声明数组您就可以访问,数组索引从0

开始最后一个元素:

String output[][] = new String[ict][total_slots+1]; 

您for loop你有

for(int x=1; x<=(ict); x++) 
    for(int y=1; y<=(total_slots); y++) 
     output[x][y]="n"; 

在最后迭代外部循环和内部循环的第一次迭代,您试图访问output[ict][0],这是引发异常的原因。请记住,因为0是第一个索引,所以ict - 1将是第一个维度的最后一个有效索引。

试试这个:

String output[][] = new String[ict][total_slots]; //this is cleaner 

for(int x=0; x<ict; x++) 
    for(int y=0; y<total_slots; y++) 
     output[x][y]="n"; 

这种方式外循环的最后一次迭代只会上升到ict - 1

编辑: 看来你已经显著编辑的问题。请不要在将来回答问题时编辑您的问题,因为这只会让新读者感到困惑。

由于您的代码现在正确,唯一的错误(编译时间不少,与例外无关)是limit[x]++;无效的事实,因为limit尚未在此范围内声明。否则代码是合法的,运行良好。

+0

数组声明为total_slots + 1,所以'<='对。糟糕的风格无论如何用+1声明并使用<=。 – hinneLinks

+0

我纠正了,他宣布第一个维度错了。编辑答案 – ForeverStudent

+0

嘿ForeverStudent!感谢你的努力,但是我没有在你解释过的线上得到例外。输出[] [] =“n”与两个for循环清晰地工作。在下一个循环中,当输出[1] [1]被访问时,它们发生异常。 –

1
{ 
     int ict=66,total_slots=12,h1=15,index_count=65; 
.................................................. 
.................................................. 
     for (int x=1; x <= h1; x++) { 
       output[x][1]="y";//exception occurs here 
       limit[x]++; 
      } 
     } 

在最后的for循环,您收到ArryIndexOutOfBoundsException,而试图访问元件输出[13] [1]导致你的阵列宽度只有13即最大指数为12,但不超过该

使用total_slots代替H1

1

我在PROG的最后一行得到数组索引越界异常,输出[1] [1]有生成这样的异常。

重新检查控制台输出。你一定错了错误行,因为没有办法产生这样的例外。最可能的问题在于limit[],我们不知道它是如何声明的。

顺便说一句,最后一行是limit[x]++;)