数组索引超出范围:30(Java)
我正在编写一个程序,将用户输入的整数打印成二进制形式。 当我运行它并输入数字5时,它崩溃并给出错误:数组索引超出范围:30(Java),java,arrays,exception,bounds,Java,Arrays,Exception,Bounds,我正在编写一个程序,将用户输入的整数打印成二进制形式。 当我运行它并输入数字5时,它崩溃并给出错误: java.lang.ArrayIndexOutOfBoundsException:30 在PrintBinaryDigitsFixed.main(PrintBinaryDigitsFixed.java:27) i、 e“数字[计数器]=数字%2 为什么我会遇到越界异常?它应该将余数分配给第一个元素,然后再转移到第二个元素,不是吗 我觉得我犯了一个明显的错误,但我不知道是什么 final int
java.lang.ArrayIndexOutOfBoundsException:30 在PrintBinaryDigitsFixed.main(PrintBinaryDigitsFixed.java:27) i、 e“数字[计数器]=数字%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
,并且您在循环中分配modNumber=number/2
,因此从第二次迭代开始modNumber
是一个常量(对于第一次迭代的大多数情况,它是2
,但随后您将number/2
分配给它);如果你到达了那一点,你就会呆在那里。因此循环一直持续到计数器
达到30
,此时数字[counter]
抛出异常。您从不更改循环中的number
,并且在循环中分配modNumber=number/2
,因此从第二次迭代开始modNumber
是一个常量(对于第一次迭代的大部分时间,它是2
,但随后您将number/2
分配给它);如果您到达该点,您将停留在那里。因此循环将继续,直到counter
达到30
,此时位[计数器]
抛出异常。如果number=5
,number/2
返回2
,因此modNumber
永远不等于0。顺便说一句,你可能需要使用位掩码和移位运算符,而不是mod和division。这会更快、更干净。谢谢你的回答,我从来没有听说过这些,所以我会看看。它们听起来像是与密码学有关吗?谢谢你ZouZou tooIfnumber=5
,number/2
返回2
,因此modNumber
永远不等于0。顺便说一句,你可能想使用位掩码和移位运算符,而不是mod和division。这会更快更干净。谢谢你的回答,我从来没有听说过我来看看。它们听起来像是密码学的东西?谢谢你邹祖的牙床!你可以想象当我意识到我完全错过了它时我内心的呻吟谢谢!你可以想象当我意识到我完全错过了它时我内心的呻吟