2017-06-21 3 views
1

J'ai un problème que mon professeur veut dans l'attente du code et essaie de l'attraper. Protéger avant la mauvaise entrée et j'ai besoin de mettre cela à mon code J'ai quelque chose mais ne fonctionne pas correctement si je mets une lettre comme a, b, c le programme tombera.L'attente en java tombe quand je mets la lettre a b c

package projectprucha; 

import java.util.Scanner; 
import java.io.*; 
import java.util.InputMismatchException; 

public class Projectprucha { 

public static Scanner scan = new Scanner(System.in); 

public static void main(String[] args) { 

    int Choose; 

    do { 

     writeMenu(); 
     Choose = scan.nextInt(); 
     scan.nextLine(); 

     try { 
      switch (Choose) { 

       case 1: 

        Joke vtip = new Joke(); 
        vtip.Napis(); 
        JokeII vtipII = new JokeII(); 
        vtipII.NapisII(); 
        break; 

       case 2: 

        Kalkulacka.staticMethod(); 
        break; 

       case 3: 

        Moudro rada = new Moudro(); 
        rada.Rekni(); 

       case 0: 
        System.out.println("You have exited the system"); 
        System.exit(0); 
       default: 
        throw new InputMismatchException(); 
      } 
     } catch (InputMismatchException e) { 
      System.out.println("Error in the data you have entered please try again"); 

     } 
    } while (Choose != 0); 

} 

    private static void writeMenu() { 
    System.out.println("Menu"); 
    System.out.println("1: Něco pro zasmání"); 
    System.out.println("2: Kalkulačka"); 
    System.out.println("3: Rada do života"); 
    System.out.println("0: Ukončit program"); 
} 

} 
+0

vous pouvez obtenir l'entrée comme une chaîne ('balayage .next() '), vérifie si c'est un nombre (par exemple avec une expression régulière) et le convertit ensuite en un nombre –

+1

l'exception sera lancée par' scan.nextInt() 'de sorte que vous devriez déplacer cette ligne (et ce qui suit) dans le bloc 'try' –

Répondre

1

L'erreur par une entrée non numérique est que nextInt est pas dans votre bloc try. Les problèmes enregistrés aux autres réponses m'amène à cette solution. Vous devez obtenir la ligne complète en entrée et l'analyser en int. Maintenant, vous avez besoin de plus d'attraper un NumberFormatException:

do { 
    try { 
     String input = scan.nextLine(); 
     int choose = Integer.parseInt(input); 
     // ... 
    catch (InputMismatchException | NumberFormatException e) { 
     System.out.println("Error in the data you have entered please try again"); 
    } 
} while (true); 

Vous n'avez pas besoin choose en dehors de votre boucle parce que vous utilisez System.exit(0) si l'entrée est 0.

+0

Oui, vous avez raison. Je suppose que c'est la meilleure solution dans ce cas. –

-2

Vous avez votre type de données integer pour choisir une variable. Vous ne pouvez donc pas passer le caractère ou la chaîne comme paramètre de commutateur.

Merci

+1

La question n'est pas de savoir pourquoi l'erreur se produit mais comment l'attraper. –

+0

Oui, je suis d'accord mais il est très important de savoir pourquoi il reçoit une erreur pour la saisie comme a, b, c. Nous pouvons donc aller chercher une solution. Veuillez vérifier la solution publiée. Bravo – Pradeep

-1

Put essayer avant de prendre l'entrée de sorte que s'il y a exception en entrée tapez votre erreur sera pris en prise.

package projectprucha; 

import java.util.Scanner; 
import java.io.*; 
import java.util.InputMismatchException; 

public class Projectprucha { 


public static Scanner scan = new Scanner(System.in); 

public static void main(String[] args) { 

int Choose; 

do { 

    writeMenu(); 
try{ 
    Choose = scan.nextInt(); 
    scan.nextLine(); 


     switch (Choose) { 

      case 1: 

       Joke vtip = new Joke(); 
       vtip.Napis(); 
       JokeII vtipII = new JokeII(); 
       vtipII.NapisII(); 
       break; 

      case 2: 

       Kalkulacka.staticMethod(); 
       break; 

      case 3: 

       Moudro rada = new Moudro(); 
       rada.Rekni(); 

      case 0: 
       System.out.println("You have exited the system"); 
       System.exit(0); 
      default: 
       throw new InputMismatchException(); 
     } 
} 
    } catch (InputMismatchException e) { 
     System.out.println("Error in the data you have entered please 
try again"); 

    } 
} while (Choose != 0); 

} 

private static void writeMenu() { 
System.out.println("Menu"); 
System.out.println("1: Něco pro zasmání"); 
System.out.println("2: Kalkulačka"); 
System.out.println("3: Rada do života"); 
System.out.println("0: Ukončit program"); 
} 

} 
+0

Cette réponse est pire que la première ... Cela ne compilera pas parce que votre 'try' est dans le corps de la classe –