Сканирование и проверка двоичных чисел - PullRequest
0 голосов
/ 01 мая 2020

Мне удалось выполнить назначение, но затем я понял один фатальный недостаток: я не позволял коду принимать строку двоичных чисел. Мне удалось получить код l oop, как я и хотел, пока не было введено двоичное число (0 или 1), но я не могу понять, как разрешить коду принимать строку двоичных чисел (ie: 1010) без разрушения созданного мною l oop 1001

Я также включу инструкции: 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);

Как бы я go отредактировал код, включив в него строку двоичных чисел, но все еще поддерживаете l oop и другие детали выше? Или мне придется полностью изменить код, чтобы включить и принять двоичную строку?

Ответы [ 4 ]

3 голосов
/ 01 мая 2020

Не объявляйте объект сканера в вашем l oop. для каждой итерации вашего l oop вы создаете экземпляр другого объекта Scanner. Объявите и инициализируйте его выше и вне l oop.

. Примите ввод как строку, а затем подтвердите факт, что то, что было введено, действительно является двоичным числом:

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

The если в условии оператора (!binaryNumber.matches("[01]+")) используется метод String # matchs () вместе с небольшим регулярным выражением (RegEx) для обеспечения (проверки) a было предоставлено строковое представление двоичного значения. Если нет, то пользователь информируется и ему разрешается повторить попытку.

Используемое регулярное выражение ("[01]{1,}") в основном означает: это совпадение, если указанная строка содержит одну или больше только 0 и 1.

1 голос
/ 01 мая 2020

Вы можете проверить двоичный файл, используя REGEX [01]+, что означает любую комбинацию из 0 и 1, повторенную один или более. если совпадений нет, продолжайте, пока не найдете правильный двоичный файл и не выйдите из l oop.

    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 голосов

Вы можете использовать функцию 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);`

Я думаю, это помогает

0 голосов
/ 01 мая 2020

Вместо того, чтобы превращать ввод в int, вы можете иметь вход в виде строки и сопоставлять его с регулярным выражением, например ^[0-1]+$

Если поместить это в код, это будет

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