Partage
  • Partager sur Facebook
  • Partager sur Twitter

Boucle avec gestion d'exception

répéter une lecture de clavier

Sujet résolu
    18 novembre 2017 à 1:38:50

    Bonjour a tous,

    j'ai un soucis je n'arrive pas à correctement redemander une lecture de clavier après avoir gérer mon exception et je ne vois pas d'où peut provenir l'erreur. Tous les conseils sont les bienvenues, merci d'avance.

    voici mon code:

    import java.util.*;
    
    public class Util{
    	public  static int demanderEntier(String msg){
    		Scanner sc = new Scanner(System.in);
    		int nb = 0;
    		boolean BonInput;
    
    		try{
    			BonInput = true;
    			System.out.print("Veuillez entrer un entier: ");
    			nb = sc.nextInt();
    			System.out.println();
    		}
    
    		catch(InputMismatchException e){
    			System.out.println(msg);
    			BonInput = false;
    
    		}
    
    		while(!BonInput){
    			try{
    				BonInput = true;			
    				System.out.print("Veuillez entrer un entier: ");
    				nb = sc.nextInt();
    				System.out.println();
    			}
    			catch(InputMismatchException a){
    				BonInput = false;
    				System.out.println(msg);
    			}
    		}
    
    			/*finally{
    				System.out.print("Veuillez entrer un entier: ");
    				nb = sc.nextInt();			
    
    			}*/
    
    
    		return nb;
    	}
    
    	public static void main(String[] args) {
    		System.out.println(demanderEntier("La valeur entrée n'est pas correct, veuillez réessayer svp!"));	
    	}
    
    }



    -
    Edité par ElsonGesteur 18 novembre 2017 à 1:39:30

    • Partager sur Facebook
    • Partager sur Twitter
      18 novembre 2017 à 7:11:41

      Bonjour,

      Qu'est-ce qui ne marche pas ?

      Sinon, j'aurais une suggestion. "Veuillez entrer un entier", ce n'est pas très informatif. Un message plus descriptif serait plus utile comme "Veuillez entrer votre âge : " ou "Combien de cartes voulez-vous ? ". Pour faire ça, tu pourrais ajouter un paramètre "question" à ta méthode.

      Dernière chose. En Java, les noms de variable commencent par une minuscule (bonInput)

      • Partager sur Facebook
      • Partager sur Twitter
        18 novembre 2017 à 12:03:10

        Lorsque j'exécute le programme, et que j'entre une valeur eronné, cela provoque une boucle infini et dans cette dernière  lorsque mon programme me demande de rentrée une valeur,  je n'ai pas le temps de la rentée  et ensuite il passe a l'instruction suivante(c-a-d qu'il affiche le @param msg), ainsi de suite sans s'arrête donc pour résumer je n'arrive pas à rentrée ma valeur(en lecture de clavier) dans ma boucle et je ne sais pas c'est du à quoi..

        -
        Edité par ElsonGesteur 18 novembre 2017 à 12:10:52

        • Partager sur Facebook
        • Partager sur Twitter
          18 novembre 2017 à 13:31:30

          Le problème vient du fait que nextInt ne "consomme" pas le retour à la ligne. En fait, nextInt n'est pas très adapté pour lire les entrées clavier. Perso, je préfère utiliser

          nb = Integer.parseInt(sc.nextLine());
          

          Avec ça, il faudra changer le type d'exception en NumberFormatException.

          Une autre chose que je trouve gênante dans ton code est la répétition du bloc lignes 9 à 20.

          Quand tu as du code qui est copié-collé, c'est toujours un problème. Si tu as un bug dans ton code ou si tu veux le modifier, tu dois corriger ou modifier chaque copie.

          9 fois sur 10, ça peut se corriger simplement en mettant le code dupliqué dans une méthode. Dans ton cas c'est plus simple. Tu peux remplacer la boucle while par une boucle do-while.

          • Partager sur Facebook
          • Partager sur Twitter

          Boucle avec gestion d'exception

          × 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