2015-02-21 3 views
0

Мне нужна программа java, которая запрашивает число от 0 до 2. Если пользователь пишет 0, программа заканчивается. Если пользователь пишет 1, он выполняет одну функцию. Если пользователь пишет 2, он выполняет другую функцию. Я также хочу, чтобы обрабатывать ошибки «java.lang.NumberFormatException», с сообщением, и в этом случае, переспросить у пользователя число, пока он не пишет число между 0 и 2While - try-catch в Java

Я использую

public static void main(String[] args) throws IOException { 
    int number = 0; 
    boolean numberCorrect = false; 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 



     while (numberCorrect == false){ 
      System.out.println("Choose a number between 0 and 2"); 
      String option = br.readLine(); 
      number = Integer.parseInt(option); 

      try { 
       switch(option) { 
       case "0": 
        System.out.println("Program ends"); 
        numberCorrect = true; 
        break; 
       case "1": 
        System.out.println("You choose "+option); 
        functionA(); 
        numberCorrect = true; 
        break; 
       case "2": 
        System.out.println("You choose "+option); 
        functionB(); 
        numberCorrect = true; 
        break; 
       default: 
        System.out.println("Incorrect option"); 
        System.out.println("Try with a correct number"); 
        numberCorrect = false; 
       } 
      }catch(NumberFormatException z) { 
       System.out.println("Try with a correct number"); 
       numberCorrect = false; 
      } 
     } 
    } 

Но с этим кодом catch (NumberFormatException z) не работает, и программа не запрашивает снова число.

+0

Ответ уже дан. Я думаю, вы можете использовать Scanner вместо BufferedReader. – Kartic

ответ

2

Вы никогда не поймать NumberFormatException здесь. Ваш код в основном делает:

while (...) { 
    // this can throw NumberFormatException 
    Integer.parseInt(...) 

    try { 
     // the code in here cannot 
    } catch (NumberFormatException e) { 
     // therefore this is never reached 
    } 
} 

То, что вы хотите сделать здесь:

while (!numberCorrect) { 
    line = br.readLine(); 
    try { 
     number = Integer.parseInt(line); 
    } catch (NumberFormatException ignored) { 
     continue; 
    } 

    // etc 
} 
0

Вы могли бы поставить попробовать/поймать вокруг ParseInt как это:

while (numberCorrect == false){ 
    System.out.println("Choose a number between 0 and 2"); 
    String option = br.readLine(); 

    try { 
     number = Integer.parseInt(option); 
    }catch(NumberFormatException z) { 
     System.out.println("Try with a correct number"); 
     numberCorrect = false; 
     option = "-1"; 
    } 

    switch(option) { 
     case "0": 
     System.out.println("Program ends"); 
     numberCorrect = true; 
     break; 
... 
Смежные вопросы