2016-04-28 13 views
1

den folgenden Code zu beenden nach dem Versuch Catch-Block abfangen cancel exception.its nicht erlaubt mir die Wahl aus der Menüoption. Also meine Frage ist, welche Änderungen ich an diesem Code vornehmen muss, damit ich zurückschleifen kann, damit ich Benutzereingaben wieder bekommen kann.Programm nach der Verwendung von versuchen catch Block in Switch-Anweisung

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

Warum gibt es einen 'brechen;' nach dem Abschluss des 'Schalter (Wahl)' Block? Wird dich das nicht aus der Schleife werfen? – KevinO

+0

das war ein Tippfehler in meinem Code und ich änderte nur noch das gleiche Problem. – user6238843

+0

es hört völlig auf. – user6238843

Antwort

0

Stellen Sie sicher, choice ist nicht 0, bevor Sie continue;

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

Hinweis dass Sie Standardchoice auf einen Anfangswert von 0.

Wenn Sie Ihre Logik in ein (oder zwei) Dienstprogrammmethoden extrahiert haben, um das Menü anzuzeigen und die Wahl des Benutzers zu erhalten, würde es die Dinge vereinfachen; so etwas wie

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(); 
     } 
    } 
} 

Dann wird Ihr main könnte es aufrufen wie

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

Es gibt eine "Pause" nach dem Schalter. Ist das nicht die Ursache und nicht das? – Gendarme

+0

@Gandarme Vielleicht bin ich dumm zu glauben OP über * der folgende Code nach dem Versuch zu beenden fangen Block fängt Ausnahme *. –

+0

Wenn ich die Auswahl auf 1 ändere, läuft mein Code unendlich. – user6238843

Verwandte Themen