为简单起见,我有以下方法来计算输入的数字是否为二进制(只接受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?
先谢谢你们!
答案 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)
尝试将character
与character
进行比较,而不是number
。将您的比较改为:
Digits[i] > '1'
将修复此代码。
ASCII代码中的 "1"
表示具有49
的十进制值,如下表所示:
答案 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();
将char
与int
进行比较时,char
会使用该字符的整数值隐式转换为int
。 '1'
的整数值为49
。
一种简单的方法是在比较的两边使用字符:
if (Digits[i] > '1')
或者可以使用char
:
if (Character.getNumericValue(Digits[i]) > 1)
答案 5 :(得分:0)
以下是问题:if (Digits[i] > 1)
您正在将char
与int
进行比较。你应该改变这个逻辑。将char
与char
或int
与int
进行比较。
答案 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);
}
}
}