java—我用一个快速的二进制计数器得到负值

nhn9ugyo  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(200)

在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 我会很感激任何解释可能发生了什么的答案,这样我就可以创建一个更有效和准确的二进制计数器。

798qvoo8

798qvoo81#

您遇到整数溢出。一 int 在java中是32位,所以最大值是2147483647。你试图存储的数字超过了这个数字。你可能想用 long 或者只是保持表示为字符串。
(顺便说一句,您的二进制计数器实际上没有正确计数,但您可能已经知道这一点。还有,你真的想 || ,它是逻辑或运算符,而不是 | ,这是按位“或”运算。)

相关问题