抛出异常后循环回程序

时间:2016-02-24 21:52:27

标签: java exception-handling while-loop

public void runMenu() {

  int x = 1;
  Scanner Option = new Scanner (System.in);
  int Choice = 0; 

  do {  
    try {
      System.out.println("Choose Option");
      System.out.println("");
      System.out.println("1: Create Account");
      System.out.println("2: Check Account");
      System.out.println("3: Take Action");
      System.out.println("4: Exit");

      System.out.println("Please choose");
      Choice = Option.nextInt();  

      switch (Choice) { //used switch statement instead of If else because more effective
        case 1:    
          CreateAccount();
          break;   //breaks iteration
        case 2:     
          selectAccount();
          break;
        case 3:
          Menu();
          int choice = UserInput();
          performAction(choice);
          break;
        case 4:
          System.out.println("Thanks for using the application"); 
          System.exit(0);       
        default:
          System.out.println("Invalid Entry");
          throw new Exception();  
      }
    } catch (Exception e) {
      System.err.println("Enter Correct Input");
      return;  
    }
  } while (true);
}

我试图在用户输入错误的输入类型(如字母)时捕获异常,然后返回菜单,现在它捕获异常但它不会停止运行我必须强制停止程序。所以我添加了一个返回,但只显示异常错误并停止,如何让它返回菜单?

4 个答案:

答案 0 :(得分:0)

移动"尝试{"在" System.out.println之后("请选择");"线。

答案 1 :(得分:0)

那是因为你在catch块中从方法本身返回。 并且不要抛出这样的异常。只需使用一些布尔值来知道选择是否有效并循环直到选择输入正确。不要使用while(true),而是每次都像下面那样依赖布尔标志,

public void runMenu() {
    int x = 1;
    Scanner Option = new Scanner (System.in);
    int Choice = 0; 
    boolean isValidChoice = false;
  do{  
     isValidChoice = false;
     Choice = 0; 
     System.out.println("Choose Option");
     System.out.println("");
     System.out.println("1: Create Account");
     System.out.println("2: Check Account");
     System.out.println("3: Take Action");
     System.out.println("4: Exit");
     System.out.println("Please choose");
     if(Option.hasNextInt()){
       Choice= Option.nextInt(); 
       isValidChoice = true;
     }
    switch (Choice)
    {
    case 1:
        CreateAccount();
        break; 
    case 2: 
        selectAccount();
        break;
    case 3:
         Menu();
         int choice = UserInput();
         performAction(choice);
        break;
    case 4:
        System.out.println("Thanks for using the application"); 
        System.exit(0);
    default:
        isValidChoice = false;//if invalid choice, then set flag to loop
        System.out.println("Invalid Entry");
}


} while (!isValidChoice);
}

答案 2 :(得分:0)

你只需要删除catch中的返回值。也只是作为一个提示,你可以摆脱do while而只是有一个while循环,因为循环永远不会结束。

Game.game.fail();

答案 3 :(得分:0)

好的,所以我非常确定这应该有效:

如果存在有效输入

,则在while循环之外创建一个布尔值
boolean validInput = true;

默认情况下,将此值设置为false(表示输入无效)

default:
    System.out.println("Invalid Entry");
    validInput = false;
    throw new Exception();

确保catch语句仍在do循环中,因为throw子句将暂停正常执行并转换为异常执行。接下来,测试人员将测试是否存在有效输入

while(!validInput)

最后转到do循环的顶部并将validInput设置为true。这将使每次清除之前的错误输入时都是这样。

这应该有用。