如何显示无效用户输入的错误消息?

时间:2016-11-08 01:30:30

标签: java

我的程序的目的是接收二进制数(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();


 }


 }

}

3 个答案:

答案 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.");
        }


    }
  }
}