扫描并检查二进制数

Scan and Check for Binary Numbers

我设法完成了作业,但后来我意识到一个致命的缺陷:我没有让代码接受一串二进制数。我设法让代码按照我想要的方式循环,直到输入二进制数(0 或 1),但我无法弄清楚如何使代码在没有的情况下接受一串二进制数(即:1010)破坏了我创建的循环。

我还将包括说明:1) 要求个人输入二进制数字,以及 2) 设法测试输入是否符合二进制数字系统(仅 0 和 1)允许)。

      boolean b = false;

        System.out.println("\nEnter a binary number:");
        do {
            Scanner scan1 = new Scanner(System.in);
            int binaryNumber = scan1.nextInt();

            if (binaryNumber > 1 || binaryNumber < 0) {
                System.out.println("\nInvalid input. Try again.");
            } else {
                System.out.println("\nThe binary number \"" + binaryNumber + "\" is valid.");
                break;
            }
        } while (!b);

我将如何着手编辑代码以包含一串二进制数字,但仍保持上面的循环和其他细节?还是我必须完全更改代码才能包含并接受二进制字符串?

您可以使用 REGEX [01]+ 检查二进制文件,这意味着 0 和 1 的任意组合重复一个或多个。 如果没有匹配则继续直到找到有效的二进制文件并退出循环。

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("\nEnter a binary number:");
        do {
            String binaryNumber = scanner.nextLine();
            if (!binaryNumber.matches("[01]+")) {
                System.err.println("Invalid Binary Number Entered! Try Again...");
                continue;
            }
            System.out.println("\nThe binary number \"" + binaryNumber + "\" is valid.");
            break;
        } while (true);
        scanner.close();
    }

您可以将输入作为字符串并将其与正则表达式匹配,例如 ^[0-1]+$

,而不是将输入转换为 int

将其放入代码中,它将是

boolean b = false;

System.out.println("\nEnter a binary number:");
do
{
  Scanner scan1 = new Scanner(System.in);
  String binaryNumber = scan1.next();

  if (!binaryNumber.matches("^[0-1]+$"))
  {
    System.out.println("\nInvalid input. Try again.");
  }
  else
  {
    System.out.println("\nThe binary number \"" + binaryNumber + "\" is valid.");
    break;
  }
} while (!b);
}

不要在循环中声明扫描仪对象。对于循环的每次迭代,您都在实例化另一个 Scanner 对象。在循环之上和之外声明并初始化它。

接受字符串形式的输入,然后验证所提供的确实是二进制数这一事实:

Scanner scanner = new Scanner(System.in);

String binaryNumber = "";
while (binaryNumber.equals("")) {
    System.out.print("Enter a Binary Number: --> ");
    binaryNumber = scanner.nextLine();
    if (!binaryNumber.matches("[01]{1,}"))  {
        System.err.println("Invalid Binary Number Entered! Try Again...");
        binaryNumber = "";
    }
    else {
        System.out.println("The binary number \"" + binaryNumber + "\" is valid.");
    }
}

if 语句的条件 (!binaryNumber.matches("[01]+")) 使用 String#matches() method along with a small Regular Expression (RegEx) 来确保(验证)二进制值的字符串表示被提供。如果没有,则通知用户并允许其重试。

使用的正则表达式 ("[01]{1,}") 基本上意味着:如果提供的字符串 包含一个或多个 0 和1 个。

您可以使用 split() 函数来执行此操作。 `

    System.out.println("\nEnter a binary number:");
    do
    {
        Scanner scan1 = new Scanner(System.in);
        String binaryNumber = scan1.nextLine();
        String str[] = binaryNumber.split("[01]{1,}");
        if (str.length > 0)
        {
            System.out.println("\nInvalid input. Try again.");
        }
        else
        {
            System.out.println("\nThe binary number \"" + binaryNumber + "\" is valid.");
            break;
        }
    } while (!b);`

我认为这有帮助