Java collegare un interruttore di caso di dichiarazione di “input non valido”

Sto cercando di aggiornare il mio codice per il ciclo la mia swtich dichiarazione, se un utente inserisce un qualcosa che non dispone di un’opzione definita. Ho raschiato le numerose pagine che qui, di ritorno da vari termini di ricerca e sono arrivato vicino, ma finora senza fortuna ancora.
Il mio codice qui dovrebbe ottenere uno che vuole prendere una pugnalata a farlo andare.

 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");

}

Qualsiasi tipo di assistenza in questo sarebbe molto apprezzato.

  • Dopo ulteriori test utilizzando tutti i suggerimenti qui ho finito per usare entrambi i metodi all’interno di un altro ciclo while nel programma finale. Grazie per l’aiuto a tutti. 😀

 

4 Replies
  1. 1

    Si sta utilizzando la variabile in un modo strano. Dal momento che si imposta il percorso per false alla fine del ciclo, il ciclo non ripetere mai più. Se si modifica in modo che solo le opzioni valide set run=false, inserendo l’opzione sbagliata causerà il ciclo per eseguire una volta di più.

    Rimuovere run=false alla fine del switch istruzione, aggiungere, dopo la System.out.println("OptionX");

    • Molte grazie per la risposta veloce. Comunità Online è di grande aiuto.
  2. 1

    “Esegui=false” non è il posto giusto, è eseguito qualunque sia la risposta (validi o meno).

    Si dovrebbe spostare il “run=false;” all’interno di ogni valido in caso di dichiarazione,come :

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

    A proposito : “mentre (run==true)” è ridondante, è possibile scrivere “mentre(esegui)”

    • implementazione originale ha while(run) Se potessi fino voto e/o di avere 2 risposte accettate, mi piacerebbe.
  3. 1

    Il problema è che dopo l’esecuzione dell’istruzione in default, imposta il booleano eseguire false, e così arriva il ciclo. Ciò di cui abbiamo bisogno è un modo per saltare questo:-

    run = false;

    e invece andare direttamente alla condizione di loop. Una soluzione potrebbe essere quella di aggiungere un ‘continuare’ la dichiarazione di 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
    
       }
    • Una buona opzione in quanto è il minimo di modifiche al codice, ma in piccola scala implementazioni come questo, il continuare funziona alla grande. Tuttavia, in un ambiente più grande, dove ci sono i 2 cicli while, con diverse se il loop finendo in un altro che porta a l’interruttore è troppo passanti per la parte superiore dell’interno durante il ciclo di prompt per tutti gli input di nuovo, piuttosto che solo l’input per lo switch-case
  4. 1

    È possibile Aggiungere un’etichetta per il ciclo. In questo modo quando si ha la giusta opzione potrete uscire dal 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
    
    }

Lascia un commento