Есть ли причина, по которой try-catch вложен в цикл do-while, а не в цикл? - PullRequest
0 голосов
/ 23 марта 2019

У меня есть простой случай переключения, вложенный в цикл do while. в моем коде, поэтому ввод для случая переключения через пользователя. Итак, я попытался перехватить InputMismatchException, а затем цикл, чтобы продолжить {вернуться снова}, но он останавливает все. Как сделать так, чтобы он продолжал цикл?

   public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("Equation Solver");          
        char ch;
        do
        {
            try{
            System.out.println("\nPlease choose\n");
            System.out.println("1. Suvat Equations");
            System.out.println("2. Energy Equations");
            System.out.println("3. The Doppler Effect Calculations");
            System.out.println("4. Gravitational Force Equation");
            System.out.println("5. Support");
            System.out.println("6. Graph");

            int choice = scan.nextInt();

            switch (choice)
            {
             case 1 : 
                System.out.println("\nPlease choose according to the variable you want to find\n");
                System.out.println("1. Initial Velocity");
                System.out.println("2. Final Velocity");
                System.out.println("3. Acceleration");
                System.out.println("4. Distance Travelled");
                System.out.println("5. Time Taken");
                System.out.println("6. Otherwise Cancel");

                try{ 
                    int choiceCase1 = scan.nextInt();

                    switch(choiceCase1){
                        case 1 :
                            System.out.println("Please ");
                            Equation1();
                            break;
                        case 2 :
                            Equation1();
                            break;
                        case 3 :
                            Equation1();
                            break;
                        case 4 :
                            Equation1();
                            break;  
                        case 5 :
                            Equation1();
                            break;
                        case 6 :
                            break; 
                        default :
                            System.out.println("Wrong Entry \n ");
                            break;    
                    }



                }catch (InputMismatchException e){
                        System.out.println("please stop");
                 }

            case 2 : 
                Equation1();                     
                break;                          
            case 3 : 
                System.out.println("Enter integer element to insert");

                break;                         
            case 4 : 
                System.out.println("Enter integer element to insert");

                break;                                          
            case 5 : 

                break;     
            case 6 : 

                break;            
            default : 
                System.out.println("Wrong Entry \n ");
                break;   
            }    
            } catch (InputMismatchException s){
                System.out.println("Caught Exception")
            } finally{

            System.out.println("\nDo you want to continue (Type y or n) \n");
            ch = scan.next().charAt(0);    
            }
        } while (ch == 'Y'|| ch == 'y'); 

        }

Я ожидал, что пользователь сможет ввести y, а затем повторить цикл, но не разрешит его

Ответы [ 2 ]

1 голос
/ 23 марта 2019

От: https://www.tutorialspoint.com/java/java_break_statement.htm

Когда оператор break встречается внутри цикла, цикл немедленно прекращается, и управление программой возобновляется при следующем оператор после цикла.

Ваше заявление на перерыв по адресу:

    } catch (InputMismatchException s){
        break;
    }

завершает цикл.

Edit: этот оператор try / catch находится вне оператора switch. Таким образом, разрыв не выходит из оператора switch, он выходит из цикла.

0 голосов
/ 23 марта 2019

Похоже, что когда вы ловите исключение, вы выходите из цикла Do-While.Я думаю, что вы, вероятно, могли бы удалить эту команду break, и она ничего не сделает с исключением, но продолжит цикл.Имея разрыв там, если вы поймаете исключение, он прервет цикл.

...