好的,所以我正在研究一种应该结合一组二进制数的方法。由于某种原因,我得到了一个例外。当numberOfBits为4时,该方法有效,但当我向上移动到7时,它会出错。我不确定为什么它会这样做,到目前为止还没有修复它。有什么想法吗?错误在下面的代码中注明。任何帮助将不胜感激,谢谢。
Exception in thread "main" java.lang.NumberFormatException: For input string: "111001101100111"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:461)
at java.lang.Integer.valueOf(Integer.java:554)
at MP1.combine(MP1.java:96)
at MP1.shiftRight(MP1.java:76)
at MP1.main(MP1.java:131)
public Integer combine(Register register, int numberOfBits) {
String C1 = Integer.toBinaryString(register.C);
String A1 = Integer.toBinaryString(register.A);
String Q1 = Integer.toBinaryString(register.Q);
C1 = String.format("%1s", C1).replace(' ', '0');
A1 = String.format("%" + numberOfBits + "s", A1).replace(' ', '0');
Q1 = String.format("%" + numberOfBits + "s", Q1).replace(' ', '0');
String comboS = C1 + A1 + Q1;
//Says error is here (below)
Integer comboI = Integer.valueOf(comboS);
return comboI;
}
答案 0 :(得分:0)
在尝试获取valueOf
之前打印出你的comboS字符串,你会看到你的奇怪号码。
我猜它不适合整数。
答案 1 :(得分:0)
整数的最大值为2147483647
,显然111001101100111
远大于Integer.MAX_VALUE
。
Integer.valueOf(comboS)
最终致电Integer.parseInt(str)
。这就是您收到NumberFormatException
。
如果你想用二进制而不是十进制来解析111001101100111
。 Integer.parseInt(comboS, 2)
可以使用。
或者使用BigInteger
代替,没有上限。