我在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]++;
}
}
答案 0 :(得分:1)
请记住,当您声明类似String output[][]=new String[5][5];
的数组时,output[4][4]
是您可以访问的最后一个元素,因为数组索引从0开始
您已将数组声明为:
String output[][] = new String[ict][total_slots+1];
在你的for循环中
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
尚未在此范围内声明。否则代码是合法的,运行正常。
答案 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
答案 2 :(得分:1)
我在prog的最后一行得到了数组索引超出范围的异常,输出[1] [1]在那里产生了这样的异常。
重新检查控制台输出。您必须弄错错误行,因为无法生成此类异常。问题最可能在于limit[]
,我们不知道它是如何宣布的。
顺便说一句,最后一行是limit[x]++
;)