2017-01-19 3 views
-1

У меня есть меню ниже, и я хочу, чтобы меню повторялось, когда строка вводится вместо interger.I знаю, когда String входит в "in/nextInt();" он сработает сразу. Мне было интересно, что я могу сделать, чтобы остановить это, откуда я сейчас.Как повторить меню, когда String вводится в поле int?

Scanner in = new Scanner(System.in); 

    do{ 
     System.out.println(""); 
     System.out.println("Please choose from the following options. "); 
     System.out.println(""); 
     System.out.println("1. Do you want to use the default rotor settings? "); 
     System.out.println("2. Do you want to use the custom rotor settings? "); 
     System.out.println("3. Start over. "); 
     System.out.println(""); 


     menuOneAnwser = in.nextInt(); 

    }while(menuOneAnwser < 0 || menuOneAnwser > 3); 


    try{ 

     switch(menuOneAnwser){ 
      case 1: 

       Enigma.defaultSwitch = true; 
       break; 
      case 2: 
       Enigma.defaultSwitch = false; 
       g.customRotor(); 

       break; 
      case 3: 
       introduction(); 
       break; 
      default: 
       break; 
     } 

    }catch(InputMismatchException e){ 
     System.out.println("That is not a integer.... Please enter a interger between 1 and 2!"); 
     System.out.println("Please try again.."); 
     System.out.println(""); 

    } 

ответ

1

вместо Callin scann ed.nextInt непосредственно, попробуйте преобразовать эту строку в целое число уловившего исключение MENAS вход не является действительным, а затем установить menuOneAnwser -1

do{ 
     System.out.println(""); 
     System.out.println("Please choose from the following options. "); 
     System.out.println(""); 
     System.out.println("1. Do you want to use the default rotor settings? "); 
     System.out.println("2. Do you want to use the custom rotor settings? "); 
     System.out.println("3. Start over. "); 
     System.out.println(""); 

     try { 
      menuOneAnwser = Integer.parseInt(input); 
     } catch (NumberFormatException e) { 
     menuOneAnwser = -1; 
     } 


    }while(menuOneAnwser < 0 || menuOneAnwser > 3); 
0

Вы можете написать свою собственную версию tryParse (от C# Int32.TryParse), который будет пытаться разобрать вход как целое, но предупредит вас, если это не так (return null в данном случае), а затем может обрабатывать его как String или все, что вы хотели:

public static Integer tryParseInteger(String input) { 
    try { 
     return Integer.parseInt(input); 
    } catch (NumberFormatException e) { 
     return null; 
    } 
} 
0

попытаться поймать подход:

menuOneAnwser = -1; 
while (menuOneAnwser < 0 || menuOneAnwser > 3) { 
    try { 
     menuOneAnwser = in.nextInt(); 
    } catch (Exception e) { 
     System.out.println("Please try again.."); 
    } 
} 
+1

@Berger: Отредактированные, спасибо. –