2016-04-28 97 views
1

下面的代码在try catch catch捕获异常后终止。不允许我从菜单选项中进行选择。所以我的问题是我必须对此代码进行哪些更改,以便我可以循环,以便我可以再次获得用户输入。程序在switch语句中使用try catch块后终止

public class Main { 

     public static void main(String[] args) { 

      Modify modifyObj = new Modify(); 

      int choice = 0 ; 

      Scanner input = new Scanner(System.in); 

      //begin loop 
      do { 
       try{ 

       //display menu 

       System.out.println("Choose one option from following option available: "); 
       System.out.println("0) Exit program. "); 
       System.out.println("1) Create a Roster"); 
       System.out.println("2) Modify a Roster"); 
       System.out.println("3) Delete a Roster"); 



       choice = input.nextInt(); //gets user input 

        switch (choice) { 

         case 1: 
//code 
         break; 


         case 2: 
    //code 
           break; 

         case 3: 
          //code 
          break; 


        }// end of switch statement 
        break; 
       }//end oftry 
       catch(InputMismatchException inputMismatchException){ 
        System.out.println("Enter integer value between 0 and 7:"); 
        continue; 
       } 


      }while (choice!=0); //loop until user exit 0. 

     }//end of main 
    }// end of Main class 
+1

为什么有'打破;'了'开关结束后(选择)'块?这不会将你踢出循环吗? – KevinO

+0

这是我的代码中的错字,我只是改变仍然有同样的问题。 – user6238843

+0

它完全停止。 – user6238843

回答

0

确保choice不是0之前continue;

catch(InputMismatchException inputMismatchException){ 
    System.out.println("Enter integer value between 0 and 7:"); 
    choice = 1; // <-- not 0. 
    continue; 
} 

注意默认choice0的初始值。

你可以使用方法

如果你提取你的逻辑到一个(或两个)实用工具方法来显示菜单并获得用户的选择它会简化的事情;像

private static void showMenu() { 
    System.out.println("Choose one option from following option available: "); 
    System.out.println("0) Exit program. "); 
    System.out.println("1) Create a Roster"); 
    System.out.println("2) Modify a Roster"); 
    System.out.println("3) Delete a Roster"); 
} 

private static int getUserOption(Scanner input) { 
    while (true) { 
     showMenu(); 
     if (input.hasNextInt()) { 
      int t = input.nextInt(); 
      switch(t) { 
      case 0: case 1: case 2: case 3: 
       return t; 
      } 
     } else { 
      input.nextLine(); 
     } 
    } 
} 

然后你main可以调用它像

public static void main(String[] args) { 
    Modify modifyObj = new Modify(); 

    Scanner input = new Scanner(System.in); 
    int choice; 
    // begin loop 
    do { 
     choice = getUserOption(input); 
     if (choice != 0) { 
      System.out.printf("You chose %d.%n", choice); 
     } 
    } while (choice != 0); // loop until user enters 0. 
}// end of main 
+0

切换后有一个'break'。这不是原因而不是这个? – Gendarme

+0

@Gendarme也许我很愚蠢地认为OP关于*以下代码在try catch catch捕获异常*之后终止。 –

+0

当我改变选择为1我的代码无限运行。 – user6238843