在java中,我试图制作一个二进制计数器,以后我可以用它在任何base-n系统中进行计数。然而,我的结果却有一个神秘的结局。数值一度从1111跃升至-1111。这看起来很不寻常,但我不知道java中不同的数字限制是如何工作的,这一事实可能对我在这种情况下没有帮助。同时,我看了看我的代码,所以没有办法让值变成负值。我的二进制计数器代码如下:`
package bin;
public class Counter {
public static Integer currentNumber = 0;
public static Integer upTo = 1000;
public static Integer currentCount = 0;
public static void main(String[] args) {
while(upTo>=currentCount) {
if(currentNumber.toString().endsWith("0")) {
currentNumber++;
}else if(currentNumber.toString().endsWith("1")){
currentNumber+=10;
}
if(currentNumber.toString().contains("2")|currentNumber.toString().contains("3")|currentNumber.toString().contains("4")|currentNumber.toString().contains("5")|currentNumber.toString().contains("6")|currentNumber.toString().contains("7")|currentNumber.toString().contains("8")|currentNumber.toString().contains("9")) {
}else {
currentCount++;
System.out.print(currentNumber + "\n");
}
}
System.out.print("done");
}
}
`
程序的结果可以在https://pastebin.com/uumrhkhv 我会很感激任何解释可能发生了什么的答案,这样我就可以创建一个更有效和准确的二进制计数器。
1条答案
按热度按时间798qvoo81#
您遇到整数溢出。一
int
在java中是32位,所以最大值是2147483647。你试图存储的数字超过了这个数字。你可能想用long
或者只是保持表示为字符串。(顺便说一句,您的二进制计数器实际上没有正确计数,但您可能已经知道这一点。还有,你真的想
||
,它是逻辑或运算符,而不是|
,这是按位“或”运算。)