这是我的代码。它运行正常但在运行结束时我收到此错误:
线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:5 在Hwk8_Prob7.NextBitString(Hwk8_Prob7.java:27) 在Hwk8_Prob7.main(Hwk8_Prob7.java:18)
知道为什么吗?
import java.util.Arrays;
import java.util.ArrayList;
public class Hwk8_Prob7
{
public static void main(String[] args)
{
int[] bit_string = {0,0,0,0,0};
final char[] S = {'E', 'D', 'C', 'B', 'A'};
ArrayList<Character> subset = new ArrayList<>();
for( int i = 1; i <= 32; i++)
{
System.out.print( Arrays.toString( bit_string ));
subset.clear();
for(int j = bit_string.length-1; j >=0; j--)
if( bit_string[j] == 1 )
subset.add( S[j] );
System.out.println("\t" + subset.toString() );
NextBitString( bit_string );
}
System.out.println( Arrays.toString( bit_string ));
}
public static void NextBitString( int[] b )
{
int i = 0;
while(b[i] == 1)
{
b[i] = 0;
i++;
}
b[i] = 1;
}
}
答案 0 :(得分:1)
如果我错了,请纠正我,但你没有检查断言你是在数组的范围内。所以最后一次b [i] == 0也可能是数组中的最后一个元素。
因此可以说阵列b有5个值。它遍历所有值并发现所有值都等于1.当它到达最后一个值时它仍然将i从4(数组中的最后一个位置)增加到5(数组从0开始而不是1)。然后在踢出while循环之后它尝试b [5]但是这不存在因此导致越界错误。
答案 1 :(得分:0)
那是因为你可能没有测试有效范围的循环
在主代码中,您正确地执行了
for(int j = bit_string.length-1; j >=0; j--)
if( bit_string[j] == 1 )
然后在NextBitString
你只是疯狂地循环
while(b[i] == 1)
{
当i == 5
时,你将超过数组的长度