0

我正在编写一个程序来将用户输入的整数打印成二进制形式。当我运行它并输入数字 5 时,它崩溃并给我错误:
java.lang.ArrayIndexOutOfBoundsException: 30 at PrintBinaryDigitsFixed.main(PrintBinaryDigitsFixed.java:27) 即行“digits[counter] = number % 2 ;"

为什么我会出现越界异常?它应该将剩余部分分配给第一个元素,然后再转移到第二个元素,不是吗?

我觉得我犯了一个明显的错误,但我不知道它是什么

 final int MIN = 0;
    final int MAX = (int) (Math.pow(2, 30) - 1);
    int[] digits = new int[30];                 //array to hold the digits

    int number = readInput
        ("Enter an integer from " + MIN + " to " + MAX, MIN, MAX);
    int counter = 0;
    int modNumber = 2;



    while(modNumber / 2 != 0)
    {
        digits[counter] = number % 2;
        modNumber = number / 2;
        counter++;
    }
    System.out.print(number + " in binary form is ");
    listBackwardsFrom(digits, counter);

谢谢

4

1 回答 1

4

你永远不会number在你的循环中改变,你在循环中赋值modNumber = number / 2,所以从第二次迭代开始modNumber是一个常数(对于第一次迭代的大部分时间它是2,但是你分配number / 2给它);如果你达到了那个点,你会留在那里。所以循环一直持续到counter到达30,此时digits[counter]抛出异常。

于 2013-11-03T17:32:36.537 回答