简体   繁体   中英

Java Looping a switch-case statement on “invalid input”

I am looking to update my code to loop my swtich statement if a user inputs anything that doesn't have an option defined in it. I have scoured the numerous pages here that return from various search terms and have come close but so far no luck still. My code here should get any one that wants to take a stab at it going.

 java.util.Scanner;
 //import java.lang.Character.*; 
 //Thought this was needed to grab single char but its not
 public class caseloop {
 //main Method
 public static void main(String[] args)
 {
  Scanner input=new Scanner(System.in); //make so you can give input
  boolean go = true; // for starting main outer loop
  boolean run=true; // start inner loop
  while (go==true)
  {
    while (run==true)
    {
       //Output
       System.out.println("Enter option \n 1-Do this \n 2-Do this thing \n 3-Do this other thing");
       int option= input.nextInt(); //grab option number

       switch(option)
       {
         /*
          * This needs to loop and prompt user again if anything other than 1,2, or 3 is entered.
          */
         case 1:
           System.out.println("Option1");
           break;
         case 2:
           System.out.println("Option2");
           break;
         case 3:
           System.out.println("Option3");
           break;
         /*case 4:
           System.out.println("Option1");
           System.out.println("Option2");
           System.out.println("Option3");

           break;
         *
         * 
         * Case 4 was for debug
         * 
         */
         default:
           System.err.println("Invalid option selected");
           /*
            * On input that is not defined with in the switch-case it will revert to "default"
            * this fault staement needs to tell ther usere their option is not vaild and then
            * prompt them to try it again to enter an option. I can not get it to reprompt. 
            * I have tried a while and an if loop both sorta worked but did not actually loop
            * back to display again. I have been instucted that I am to not use a  try catch statment 
            * unless of course that is the only viable option in whichcase I will use it anyways.
            */

           //stupid default statement and its redundent built in "break;"

       }
      run=false;
      }


   /*
    * Outer Loop to prompt user if they want to run the entire program again with new entries.
    */
   if (run == false) 
   {
     System.out.println("Would you like to run again? Y/N");
     char again = input.next().charAt(0);
     again = Character.toUpperCase(again); //force all leters inputed to upper case, lower would work too if i change if conditions
     if (again == 'Y')
     {
       run = true;
     }
     else if (again == 'N')
     {
       System.out.println("Goodbye.");
       go=false;
     }
     else
     {
       System.err.println("Invalid entry. Try again.");
     }
   }
  }
 }
  //System.err.println("An error occured please try again");

}

Any assistance in this would be much appreciated.

You can Add a label to your loop. This way when you got the right option you'll exit the loop.

loop: switch(option)
  {
 /*
  * This needs to loop and prompt user again if anything other than 1,2, or 3 is entered.
  */
 case 1:
   System.out.println("Option1");
   break loop;
 case 2:
   System.out.println("Option2");
   break loop;
 case 3:
   System.out.println("Option3");
   break loop;
 /*case 4:
   System.out.println("Option1");
   System.out.println("Option2");
   System.out.println("Option3");

   break;
 *
 * 
 * Case 4 was for debug
 * 
 */
 default:
   System.err.println("Invalid option selected");
   continue; //this causes control to go back to loop condition

}

You are using the run variable in a very odd way. Since you set the run to false at the end of the loop, the loop will never repeat. If you change it around so that only the valid options set run=false , inputting the wrong option will cause the loop to run one more time.

Remove run=false at the end of the switch statement, add it after the System.out.println("OptionX");

The "run=false" part is not in the right place, it's executed whatever the answer (valid or not).

You should move the "run=false;" inside each valid case statement,like :

case 1:
       System.out.println("Option1");
       run=false;
       break; 

By the way : "while (run==true)" is redundant, you can write "while(run)"

The problem is that after executing statement under default, it sets the boolean run to false, and thus, comes out of the loop. What we need is a way to skip this:-

run = false;

and instead go directly to loop condition. One solution would be to add a 'continue' statement under default:-

 switch(option)
   {
     /*
      * This needs to loop and prompt user again if anything other than 1,2, or 3 is entered.
      */
     case 1:
       System.out.println("Option1");
       break;
     case 2:
       System.out.println("Option2");
       break;
     case 3:
       System.out.println("Option3");
       break;
     /*case 4:
       System.out.println("Option1");
       System.out.println("Option2");
       System.out.println("Option3");

       break;
     *
     * 
     * Case 4 was for debug
     * 
     */
     default:
       System.err.println("Invalid option selected");
       continue; //this causes control to go back to loop condition

   }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM