简单的数学问题?

时间:2016-03-10 20:41:55

标签: java

为简单起见,我有以下方法来计算输入的数字是否为二进制(只接受1和0)

public static void checkBinary(int BinaryNumber) {
    String bNumber = String.valueOf(BinaryNumber);
    char[] Digits = bNumber.toCharArray();
    for (int i = 0; i < Digits.length; i++) {
        if (Digits[i] > 1) {
            System.out.println("You can't have the digit " + Digits[i]);
            System.out.println("Your number is not a binary number.");
            System.exit(0);
        }
    }
}

但是,当我尝试运行checkBinary(1010);时,我得到以下输出

You can't have the digit 1
Your number is not a binary number.

知道为什么它将初始值1计算为大于1?

先谢谢你们!

7 个答案:

答案 0 :(得分:4)

ASCII&#39; 1&#39;与1.不一样。你应该比较:

if (Digits[i] > '1') {
   ...
}

ASCII&#39; 1&#39;是0x31或49十进制。

编辑:另外,请注意,如果输入的数字为负数,您将拥有一个ASCII&#39; - &#39;您的char数组中的(0x2d,dec 45)。真的,你应该比较&#39; 0&#39;和&#39; 1&#39;只是,不使用&gt;

答案 1 :(得分:2)

尝试将charactercharacter进行比较,而不是number。将您的比较改为:

Digits[i] > '1'

将修复此代码。

ASCII代码中的

"1"表示具有49的十进制值,如下表所示:

ascii table

答案 2 :(得分:1)

您将数字与数字表示混淆。询问'0'或'1'是否大于1是没有意义的。 '0'和'1'是数字,1是数值。

数字:'0'是一个数字。 '1'是一个数字。 “三”不是一个数字。数字是可以表示某个特定基数的数字或数字的一部分的符号。

数字:'0',“零”和“一个不到一个”都意味着相同的东西,它们是相同的数字。数字是金额,可以用许多不同的方式表示,包括数字序列。

彻底理解值与值表示之间的区别是关键编程技能。

答案 3 :(得分:1)

Digits [i]是char,你将它与1(整数)进行比较。

您需要使用

Integer.valueOf(Digits[i]) 

代替。

答案 4 :(得分:1)

因为Digits[i]等于49,大于1。

您正在使用字符,而不是数字

char[] Digits = bNumber.toCharArray();

charint进行比较时,char会使用该字符的整数值隐式转换为int'1'的整数值为49

一种简单的方法是在比较的两边使用字符:

if (Digits[i] > '1')

或者可以使用char

的直观数值
if (Character.getNumericValue(Digits[i]) > 1)

答案 5 :(得分:0)

以下是问题:if (Digits[i] > 1)

您正在将charint进行比较。你应该改变这个逻辑。将charcharintint进行比较。

答案 6 :(得分:0)

在java中,字符等于ASCII代码,因此您应该在函数中更改if语句:

public static void checkBinary(int BinaryNumber) {
        String bNumber = String.valueOf(BinaryNumber);

        char[] Digits = bNumber.toCharArray();
        for (int i = 0; i < Digits.length; i++) {
            if (Character.getNumericValue(Digits[i]) > 1) {
                System.out.println("You can't have the digit " + Digits[i]);
                System.out.println("Your number is not a binary number.");
                System.exit(0);
            }
        }
    }