Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probléme avec une exception dans une boucle

Sujet résolu
    20 novembre 2010 à 19:05:34

    Bonjour à tous.Voici ma manière de traiter une saisie d'un entier, pour choisir un menu en mode console :

    boolean donneeCorrecte;
    do{
    	donneeCorrecte=true;
    			
    	try {
    	int choix=sc.nextInt();
    	switch(choix){
    	case 1:
    		System.out.println("Menu 1");
    		break;
    	default: 
    		System.out.println("Veuillez choisir un numéro correspondant à un menu.");
    	}
    	}catch (Exception e) {
    		System.out.println("Veuillez Entrer un numéro de menu.");
    				
    		donneeCorrecte=false;
    	}
    			
    }while(!donneeCorrecte);
    


    Voila, si jamais je tape une chaine de caractère cela tombe dans une boucle infinie. Pourquoi ? De mon point de vue, il devrait rentrer dans le catch, puis la boucle se relance et on devrait à nouveau rentrer dans le try ( et donc refaire une saisie). Mais ce n'est pas le cas ici.


    ps: désolé, il y a eu une petite erreur d'indentation lors de la saisie sur le forum.
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      20 novembre 2010 à 19:14:31

      plutot que d'utiliser une boucle et un systeme compliqué, crée une petite méthode récursive:

      public int getInput() {
          try {
              System.out.println("entrez une valeur:");
              return new Scanner().nextInt();
          } catch (InputMismatchException ime) {
              System.out.println("entree invalide.");
              return getInput();
          }
      }
      


      tu peux mettre le scanner en attribut de classe pour éviter de le réinstancier à chaque fois.
      • Partager sur Facebook
      • Partager sur Twitter
        20 novembre 2010 à 22:37:26

        ok, merci pour ce conseil. Avec ça, le problème c'est résolu de lui même et mon code en est clairement simplifié.
        • Partager sur Facebook
        • Partager sur Twitter

        Probléme avec une exception dans une boucle

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown