【发布时间】:2013-11-03 17:30:17
【问题描述】:
我正在编写一个程序,将用户输入的整数打印成二进制形式。
当我运行它并输入数字 5 时,它崩溃并给我错误:
java.lang.ArrayIndexOutOfBoundsException:30
在 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);
谢谢
【问题讨论】:
-
如果
number = 5,number/2返回2,因此modNumber永远不会等于0。 -
顺便说一句,您可能希望使用位掩码和移位运算符而不是 mod 和除法。会更快更干净。
-
感谢您的回复,我从未听说过这些,所以我会看看。它们听起来像是与密码学有关?
-
也谢谢邹邹
标签: java arrays exception bounds