下一位字符串算法的数组超出界限错误

时间:2015-03-30 01:41:33

标签: java

这是我的代码。它运行正常但在运行结束时我收到此错误:

线程“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;

   }

}

2 个答案:

答案 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时,你将超过数组的长度