2014-10-12 7 views
2

Я новичок в программировании, и в настоящее время я пишу меню для банка.Как заставить мою программу обрабатывать другие символы, вводимые пользователями? в то время как/примерочных улов? (java)

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

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

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

сообщение об ошибке при

пользовательского ввода Х вместо номера:

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!"); 
    } 
    } 
} 
+1

Выглядит правильно - в чем проблема? – Mureinik

+0

@Henrik Я отправил свой ответ lemme, знаю, если это вам поможет :) –

+0

Извините, я не добавлял сообщения об ошибках при запуске программы, когда я впервые разместил вопрос. Если я запустил программу и введите «x» или другой символ, он сработает. – Henrik

ответ

2

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

общественного булева hasNextInt()

Возвращает истинного если следующего маркер на входе этого сканера может быть истолкован как целочисленное значение в по умолчанию с использованием метода nextInt(). Сканер не продвигается до любого входа. Возвращает: истинно, если и только если следующая лексема этого сканера является допустимое значение INT Броски: 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"); 
     } 
    } 

enter image description here

+0

Спасибо большое! Это работает. Мне пришлось добавить input.next(); после еще. – Henrik

+0

Зачем вам нужен input.next()? –

0

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

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

ChoiceOne=input.nextInt(); 

while (ChoiceOne != 1 && ChoiceOne !=2) 
    ChoiceOne=input.nextInt(); 
+0

А, ок. Извините, я не добавил сообщения об ошибках, когда я впервые разместил их. Я попробовал то, что вы предложили, но если пользователь вводит «X», программа выходит из строя, и я получаю сообщения об ошибках, которые я теперь добавил в вопрос. – Henrik

1

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

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