Как сделать так, чтобы моя программа могла обрабатывать другие символы, вводимые пользователями? в то время как / примерочных улов? (Джава)

Я новичок в программировании и в настоящее время я пишу меню для банка.

Пользователь может выбирать, является ли он / она администратором или клиентом, нажимая 1 или 2. Я хочу написать код так, чтобы, если пользователь вводит другие символы, кроме ints Программа отправит сообщение об ошибке и позволит пользователю выбрать снова.

До сих пор мне удалось только заставить программу обрабатывать другие целые числа, кроме 1 и 2, используя while петля.

Я думаю, что я должен, вероятно, использовать try а также catch, но я не могу заставить его работать. Я отметил, где я попробовал try/catch напичкать //----------,

сообщение об ошибке, когда пользователь вводит X вместо числа:

run:

Press 1 to login as customer or 2 to login as admin x
Exception in thread "main" java.util.InputMismatchException
  at java.util.Scanner.throwFor(Scanner.java:864)
  at java.util.Scanner.next(Scanner.java:1485)
  at java.util.Scanner.nextInt(Scanner.java:2117)
  at java.util.Scanner.nextInt(Scanner.java:2076)
  at bank.Bank.main(Bank.java:32)
Java Result: 1
BUILD SUCCESSFUL (total time: 5 seconds)

public class Bank {
  /**
   * @param args the command line arguments
   */
  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
    int ChoiceOne;

    int CustpNr;
    int CustChoice;

    int AdminpNr;
    int AdminChoice;

    System.out.print("Press 1 to login as customer or 2 to login as admin ");
    ChoiceOne = input.nextInt();

    while (ChoiceOne != 1 && ChoiceOne != 2) {
      // ---------------

      try {
        ChoiceOne = input.nextInt();
      } catch (Exception e) {
        continue;
      }

      // ----------------

      System.out.print(" Wrong number. Press 1 to login as customer or 2 to login as admin ");
      ChoiceOne = input.nextInt();
    }// ends while

    // The code below generates a menu for the customer if the user chooses 1
    // and a meny for the admin if the user chooses 2.

    if (ChoiceOne == 1) {
      System.out.print("Welcome customer. Please login by using your birthdate (yymmdd) ");
      CustpNr = input.nextInt();

      boolean quit = false;
      do {
        System.out.println("1. deposit money");
        System.out.println("2. Withdraw money");
        System.out.println("3. Check balance");
        System.out.print("Your choice, 0 to quit: ");
        CustChoice = input.nextInt();

        switch (CustChoice) {
        case 1:
          // deposit money
          break;
        case 2:
          // withdraw money
          break;
        case 3:
          // Check balance and accounts
          break;
        case 0:
          quit = true;
          break;
        default:
          System.out.println("Wrong choice.");
          break;
        }

        System.out.println();
      } while (!quit);

      System.out.println("Bye!");
    } else if (ChoiceOne == 2) {
      System.out.print("Welcome Admin. Please login using your birthdate (yymmdd) ");
      AdminpNr = input.nextInt();

      boolean quit = false;
      do {
        System.out.println("1. Add customer");
        System.out.println("2. Add account");
        System.out.println("3. List customer and accounts");
        System.out.println("4. Remove customer");
        System.out.println("5. Remove account");
        System.out.print("Your choice, 0 to quit: ");
        AdminChoice = input.nextInt();

        switch (AdminChoice) {
        case 1:
          // add customer
          break;
        case 2:
          // add account
          break;
        case 3:
          // List customer and accounts
          break;
        case 4:
          // ta bort kund
          break;
        case 5:
          // ta bort konto
          break;
        case 0:
          quit = true;
          break;
        default:
          System.out.println("Wrong choice.");
          break;
        }

        System.out.println();
      } while (!quit);

      System.out.println("Bye!");
    }
  }
}

3 ответа

Решение

Вы должны использовать hasNextInt() проверить, является ли введенное число целочисленным или нет. Если вы ввели какие-либо другие типы, вы получите java.util.InputMismatchException

public boolean hasNextInt()

Возвращает true, если следующий токен на входе этого сканера может быть интерпретирован как значение int в основании по умолчанию с использованием метода nextInt(). Сканер не продвигается дальше любого ввода. Возвращает: true тогда и только тогда, когда следующий токен этого сканера является допустимым значением int. Throws: IllegalStateException - если этот сканер закрыт

Вы можете использовать следующий пример

например:

      int i = 0;
      while (i == 0) {
        Scanner input = new Scanner(System.in);
        System.out.println("Enter just int");
        if (input.hasNextInt()) {
            System.out.println(input.nextInt());
            System.out.println("good day");
            i = 1;
        } else {
            System.out.println("please enter type int");
        }
    }

Проблема в том, что вы используете ChoiceOne=input.nextInt() в двух местах. Только тот, который находится внутри цикла, покрыт try...catch,

Удалите вызов перед циклом и используйте цикл с разрывом, как предлагается в других ответах. Вы можете проверить заранее перед звонком nextInt() или поймать java.util.InputMismatchException,

Сканер input.nextInt(); заставит пользователя, пока он не введет int при использовании в System.in, и вернет указанное значение.

Вам не нужно перехватывать его исключения, это означает, что наличия только следующего кода будет достаточно для того, чтобы ваше значение было равно 1 или 2:

ChoiceOne=input.nextInt();

while (ChoiceOne != 1 && ChoiceOne !=2 )
     ChoiceOne=input.nextInt();
Другие вопросы по тегам