我的程序的目的是接收二进制数(1和0)作为输入,验证它是二进制数,如果输入不是二进制数则拒绝输入并继续提示用户,直到他们输入二进制数,然后输出该二进制数中有多少个1和0。
这是我遇到的问题:虽然我的程序确实输出了数字中有多少1和0,即使我输入了正确的二进制数,我的输出仍然显示“ERROR:不是二进制数字。”例如,如果我的输入是10001,输出将是 -
请输入二进制数字。 10001 二进制数中有2个。 二进制数中有3个零。 错误:不是二进制数。 请输入二进制数。
我的代码中出错了什么?
import java.util.Scanner;
public class NewClass
{
public static void main( String [] args )
{
Scanner scan = new Scanner( System.in);
int i = 0, count1 = 0, count0 = 0;
String number;
System.out.println("Please enter a binary number.");
number = scan.next();
String number1 = "1";
while ((i = number.indexOf(number1, i++)) != -1) {
count1++;
i += number1.length();
}
System.out.println("There are "+ count1 + " ones in the binary number.");
String number2 = "0";
while ((i = number.indexOf(number2, i++)) != -1) {
count0++;
i += number2.length();
}
System.out.println("There are "+ count0 + " zeros in the binary number.");
int total = (count1 + count0);
int length = number.length();
if (length != total);
{
System.out.println("ERROR: Not a binary number.");
System.out.println("Please enter a binary number.");
number = scan.next();
}
}
}
答案 0 :(得分:2)
如果您在原始代码中注意到if (length != total)**;**{
;
打破了您的if语句,那么它始终会被触发。
int total = (count1 + count0);
int length = number.length();
if (length != total)
{
System.out.println("ERROR: Not a binary number.");
System.out.println("Please enter a binary number.");
number = scan.next();
}
我的建议是使用布尔函数来检查它是否是二进制文件,如下所示。
public static boolean isBinary(int number) {
int copyOfInput = number;
while (copyOfInput != 0) {
if (copyOfInput % 10 > 1) {
return false;
}
copyOfInput = copyOfInput / 10;
}
return true;
}
答案 1 :(得分:0)
我会检查字符串只有0和1使用正则表达式:
String number = "10001";
if (number.matches(".*[^01].*")) {
System.out.println("ERROR: Not a binary number.");
}
答案 2 :(得分:0)
试试这段代码。首先,您可以使用scan.nextLine()方法获取用户的输入。 第二,你不需要分别使用两个while循环来表示零和一个循环。 最后,如果有错误的输入,如2,3或其他。它应该无限循环。
import java.util.Scanner;
public class NewClass {
public static void main(String [] args) {
Scanner scan = new Scanner(System.in);
int i = 0, count1 = 0, count0 = 0;
String number;
char number1 = '0';
char number2 = '1';
int total;
while(true){
System.out.println("Please enter a binary number.");
number = scan.nextLine();
char [] charArray = number.toCharArray();
while(i < charArray.length){
if(charArray[i] == number1){
count0++;
} else if(charArray[i] == number2) {
count1++;
}
i++;
}
total = count0 + count1;
if(charArray.length == total){
System.out.println("There are " + count0 + " zeros in the binary number.");
System.out.println("There are " + count1 + " ones in the binary number.");
break;
} else {
System.out.println("ERROR: Not a binary number.");
}
}
}
}