2017-02-20 20 views
0

Обработка исключений

Я хочу, чтобы пользователь мог ввести в два междунар после неправильного ввода. Я попробовал продолжить; в блоке catch, но он только запустил ошибки во время выполнения. Я просто хочу, чтобы он вернулся к вершине основного метода после выброса ошибки. Посмотрите, как на рис. Он не позволял пользователю вводить какие-либо цифры. Я хочу исправить эту часть.

Вот код. Это только для практики.

/** 
practing exceptions, example 1 in book for exceptions 
*/ 

    import java.util.Scanner; 

    public class PracticeExceptions extends Exception { 

    public static void main(String[] args) 
    { 
    String response = "y"; 
    Scanner keyboard = new Scanner(System.in); 

    do{ 
    int n1, n2; 
    double r; 
    System.out.println("Please enter two numbers"); 

    try{ 
      n1 = keyboard.nextInt(); 
      n2 = keyboard.nextInt(); 
      r = (double) n1/n2;  

     System.out.format("Your answer: %.2f %n", r); 

     }catch(Exception a){ 

     System.out.println("Invaild input please try again"); 

     } 

     System.out.println("Again (y/n)"); 
     response = keyboard.next(); 

     }while(response.equalsIgnoreCase("y")); 
    } 
    } 
+0

Поймать и игнорировать любые исключения, это очень плохая практика. Просто используйте 'if' –

+0

Не уверен, что вы имеете в виду, это просто для практики для java более низкого уровня. Может быть, не самое лучшее, но я только узнал ограниченное количество java. Итак, это только для практического использования. – MoneyMonster

+0

@MonkeyMonster Я имею в виду вместо использования try-catch, используйте 'if'. Вы ожидаете, что пользователь предоставит вам недопустимое значение (n2 = 0). Try-catch должен использоваться для исключений, которые не зависят от пользователя. Вы можете сделать то же самое с 'if (n2 == 0) {isValid = false;}' –

ответ

0

Избавьтесь от недопустимого ввода в вас буфер сканера

}catch(Exception a){ 
    System.out.println("Invalid input please try again"); 
    keyboard.next(); 
} 

код теперь будет выпадать до System.out.println("Again (y/n)");

Если вы хотите, чтобы петля обратно к вершине добавить continue после keyboard.next();

+0

Если я это сделаю, он все равно не просит пользователя ввести еще два int или даже разрешить их – MoneyMonster

+0

см. Мой отредактированный ответ –

+0

Спасибо, я просто добавил, продолжал, работал плавно. Я видел, что происходит. – MoneyMonster