2017-09-14 5 views
0

Je suis complètement nouveau à la programmation et j'ai fait face à un problème, où je ne peux pas retourner à mon principal faire tandis que la boucle quand j'attrape InputMismatchException. J'ai cherché Google et je ne peux pas trouver et comprendre pleinement les solutions qui sont données par les utilisateurs.Comment prolonger faire ... tout en boucle après Exception attraper

Mon but est d'éliminer la possibilité pour les utilisateurs d'entrer des caractères qui pourraient provoquer l'arrêt de l'application. C'est pourquoi j'ai entouré presque tout le code avec try/catch.

J'ai essayé de mettre plusieurs boucles à mon code et cela se termine de 2 façons:

  1. Ma boucle se termine jamais après avoir atteint catch.
  2. Je suis remis à la console et rien ne se passe (je peux toujours taper là-bas).

Quelqu'un pourrait-il m'expliquer comment atteindre mon objectif? J'ai aussi essayé hasNextInt en espérant qu'il me demandera à nouveau d'entrer une valeur correcte mais ce n'est pas le cas. Qu'est-ce que je fais mal? J'ai débogué l'application et ce que je peux voir est que la procédure est sautée de jusqu'à la fin de mon code.

Scanner scanner = new Scanner(System.in); 

System.out.print("\nChoose mode: "); 

int userInput = 0; 

do { 
    do { 
     try { 
      userInput = scanner.nextInt(); 
      switch (userInput) { 
       case 1: 
        Mode_1.multiplyTwoInteger(); 
        break; 
       case 2: 
        Mode_2.multiplyTwoSpecifiedValues(); 
        break; 
       case 3: 
        System.out.println("\nYou quit application. Goodbye :)"); 
        return; 
       default: 
        System.out.print("Not found! Choose again game mode: "); 
      } 
     } catch (Exception InputMismatchException) { 
      System.out.print("Wrong input!\nChoose again:"); 
     } 
    } while (userInput <= 0 || userInput > 3); 
} while (userInput != 3); 

Répondre

0

Lorsque vous obtenez cette exception, votre console a cette exception et présente nextInt() lira comme un mauvais format et donnera InputMismatchException.

essayez de réinitialiser le scanner objet dans le bloc catch comme scanner = new Scanner (System.in); ou vous pouvez le faire en lisant une mauvaise entrée scanner.nextLine().

Essayez de changer votre code pour utiliser comme ci-dessous:

try { 
        userInput = scanner.nextInt(); 
        switch (userInput) { 
         case 1: 
          Mode_1.multiplyTwoInteger(); 
          break; 
         case 2: 
          Mode_2.multiplyTwoSpecifiedValues(); 
          break; 
         case 3: 
          System.out.println("\nYou quit application. Goodbye :)"); 
          return; 
         default: 
          System.out.print("Not found! Choose again game mode: "); 
        } 
       } catch (Exception InputMismatchException) { 
        scanner=new Scanner(System.in); // Reinitiate the scanner object or use scanner.nextLine() to read bad input. 
        System.out.print("Wrong input!\nChoose again:"); 
       } 
+0

C'est des connaissances nouvelles pour moi. Je ne savais pas que ça fonctionnait de cette façon. Merci beaucoup pour votre solution. – Ahlen