在 Do While 循环中使用 try/Catch

Using a try/Catch in a Do While loop

我正在尝试在 do-while 循环中使用 try-catch 语句。逻辑似乎有效,但 do 循环并没有一遍又一遍地循环。如果它进入捕获状态,它似乎只是跳出了 do 循环。

private boolean madeChoice = false;

public void whatToDo(){
    System.out.println("");
    System.out.println("");
    System.out.println("=====================================");
    System.out.println("Welcome");
    System.out.println("=====================================\n");
    System.out.println("What would you like to do today? Your choices are: \n");
    choices();

    do{
        try{
            System.out.println("");
            System.out.println("Please enter your choice");
            int numberEntered = keyboard.nextInt();

            if(numberEntered > 3 || numberEntered < 1){
                System.out.println("-----------------------------------------------------------");
                System.out.println("That is not a choice. Please choose from the following: \n");
                choices();
                numberEntered = keyboard.nextInt();
               
            }else{
                System.out.println("That is a good CHOICE");
                madeChoice = true;
            }
          
        }catch (InputMismatchException e){
            System.out.println("-----------------------------------------------------------");
            System.out.println("This is not a number. Please choose from the following: \n");
            choices();
            
        }

    }while(!madeChoice);

}

private void choices(){
    System.out.println("1. Add a new set into your account");
    System.out.println("2. See all the sets in your account");
    System.out.println("3. Exit the Account Manger.");
}

continue前添加keyboard.nextLine(),出现异常时,需要“吃掉”输入:

           catch (InputMismatchException e){
                System.out.println("-----------------------------------------------------------");
                System.out.println("This is not a number. Please choose from the following: \n");
                choices();
                keyboard.nextLine();
                continue;
                // numberEntered = keyboard.nextInt();
            }

编辑,我更改了您的一些代码:

public void whatToDo(){
        System.out.println("");
        System.out.println("");
        System.out.println("=====================================");
        System.out.println("Welcome");
        System.out.println("=====================================\n");
        System.out.println("What would you like to do today? Your choices are: \n");
        Scanner keyboard = new Scanner(System.in);
        do{
            try{
                choices();
                System.out.println("");
                System.out.println("Please enter your choice");
                int numberEntered = keyboard.nextInt();

                if (numberEntered >= 1 && numberEntered <= 3) {
                    System.out.println("That is a good CHOICE");
                    madeChoice = true;
                } else {
                    System.out.println("-----------------------------------------------------------");
                    System.out.println("That is not a choice. Please choose from the following: \n");
                }
            }catch (InputMismatchException e){
                System.out.println("-----------------------------------------------------------");
                System.out.println("This is not a number. Please choose from the following: \n");
                keyboard.next();
                // numberEntered = keyboard.nextInt();
            }

        }while(!madeChoice);

    }

也许你可以将你的代码更新为这样的东西,这似乎对我有用:

private boolean madeChoice = false;
private static boolean isMissMatchException = false ;
private static boolean isInvalidInput = false ;

public void whatToDo(){
    if(Test.isMissMatchException) 
    {
         System.out.println("-----------------------------------------------------------");
         System.out.println("This is not a number. Please choose from the following: \n");
         Test.isMissMatchException = false ;
    } else if (Test.isInvalidInput) 
    {
        System.out.println("-----------------------------------------------------------");
        System.out.println("That is not a choice. Please choose from the following: \n");
        Test.isInvalidInput = false ;
    } else {            
        System.out.println("");
        System.out.println("");
        System.out.println("=====================================");
        System.out.println("Welcome");
        System.out.println("=====================================\n");
        System.out.println("What would you like to do today? Your choices are: \n");
    }
    choices();
    
    do{
        try{
            System.out.println("");
            System.out.println("Please enter your choice");
            
            @SuppressWarnings("resource")
            int numberEntered = new Scanner(System.in).nextInt();

            if(numberEntered > 3 || numberEntered < 1){
                Test.isInvalidInput = true ;
                this.whatToDo();
               
            }else{
                System.out.println("That is a good CHOICE");
                madeChoice = true;
            }
          
        }catch (InputMismatchException e){
            Test.isMissMatchException = true ;
            this.whatToDo();
        }

    }while(madeChoice);

}

private void choices(){
    System.out.println("1. Add a new set into your account");
    System.out.println("2. See all the sets in your account");
    System.out.println("3. Exit the Account Manger.");
}