2

我是编程新手,目前正在为一家银行编写菜单。

用户可以通过按 1 或 2 来选择他/她是管理员还是客户。我想编写代码,以便如果用户键入其他符号而不是ints程序将发送错误消息并让用户选择再次。

到目前为止,我只设法让程序使用while循环处理除 1 和 2 之外的其他整数。

我想我可能应该使用tryand 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!");
    }
  }
}
4

3 回答 3

2

您必须hasNextInt()检查输入的数字是否为整数类型。如果您输入任何其他类型,您将获得java.util.InputMismatchException

公共布尔 hasNextInt()

如果此扫描器输入中的下一个标记可以使用 nextInt() 方法解释为默认基数中的 int 值,则返回true 。扫描仪不会超过任何输入。返回:当且仅当此扫描器的下一个令牌是有效的 int 值时才返回 true 抛出: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");
        }
    }

在此处输入图像描述

于 2014-10-12T19:02:21.587 回答
1

问题是你ChoiceOne=input.nextInt()在两个地方使用。只有循环内的那个被try...catch.

按照其他答案中的建议,删除循环之前的调用,并使用带中断的循环。您可以在致电前提前检查nextInt()或赶上java.util.InputMismatchException.

于 2014-10-12T19:09:25.210 回答
0

扫描仪 input.nextInt(); 将强制用户在 System.in 上使用时输入 int,并将返回所述值。

您不必捕获它的异常,这意味着只有以下代码就足以强制您的值为 1 或 2:

ChoiceOne=input.nextInt();

while (ChoiceOne != 1 && ChoiceOne !=2 )
     ChoiceOne=input.nextInt();
于 2014-10-12T19:01:22.693 回答