IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Gérer un try catch sur un scan.nextInt() en boucle


Sujet :

Langage Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 40
    Points : 27
    Points
    27
    Par défaut Gérer un try catch sur un scan.nextInt() en boucle
    Bonjour,

    Dans une saisie en boucle avec un "scan.nextInt()", lorsqu'une erreur est détectée (si par exemple on entre une lettre au lieu d'un chiffre), le programme passe bien par le bloc "catch" MAIS il boucle ensuite sans fin et ne permet pas de saisir un autre chiffre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    import java.util.*;
     
    public class Main {
     
        public static void main(String[] args) {
            Random r = new Random();
            Integer v1=0,v2=0,rep=0;
            double nbb=0,nbf=0,points=0;
            Scanner scan = new Scanner(System.in);
     
            do{
                v1=r.nextInt(100);
                v2=r.nextInt(100);
                System.out.print(v1+" + "+v2+" = ? ");
                try{
                    rep=scan.nextInt();
                    if(rep==(v1+v2)) {
                        nbb++;
                        System.out.println("  BRAVO !!!  ("+nbb+"/"+(nbb+nbf)+"  soit "+(nbb/(nbb+nbf))*10+"/10");
                    }
                    else{
                        nbf++;
                        System.out.println("FAUX, la bonne réponse est "+(v1+v2));
                    }
                }
                catch(InputMismatchException e){
                    System.out.println("NumberFormatException: vous n'avez pas entré un double !"+rep);
                    rep=1;
                }
            }while(rep!=0);
        }
     
    }
    Exemple d'exécution du programme:
    13 + 36 = ? 49
    BRAVO !!! (1.0/1.0 soit 10.0
    15 + 24 = ? 3.6
    NumberFormatException: vous n'avez pas entré un double !49
    33 + 26 = ? NumberFormatException: vous n'avez pas entré un double !1
    15 + 58 = ? NumberFormatException: vous n'avez pas entré un double !1
    58 + 98 = ? NumberFormatException: vous n'avez pas entré un double !1
    76 + 52 = ? NumberFormatException: vous n'avez pas entré un double !1
    Etc... etc... etc...

    Je souhaiterai, dans le cas d'une erreur, que le programme passe au calcul suivant. Pour l'instant il boucle sans fin sans permettre d'entrer une réponse !
    (Et si je met rep=0 il sort de la boucle).

    MERCI pour vos conseils

  2. #2
    Membre éclairé
    Homme Profil pro
    NoOb
    Inscrit en
    Mai 2007
    Messages
    554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : NoOb

    Informations forums :
    Inscription : Mai 2007
    Messages : 554
    Points : 852
    Points
    852
    Par défaut
    Bonjour,

    Penses à la balise code stp.

    J'ai rajouté scan.next(); dans ton catch, pour "flush" le Scanner, ca fonctionne mais tu devrais trouver une moyen plus propre de le faire .

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    40
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 40
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par Génoce Voir le message
    Bonjour,

    Penses à la balise code stp.

    J'ai rajouté scan.next(); dans ton catch, pour "flush" le Scanner, ca fonctionne mais tu devrais trouver une moyen plus propre de le faire .
    Bonjour Génoce,
    Tout d'abord merci pour ta réponse rapide.

    - balise code : C'est fait

    - j'ai rajouté scan.next() et effectivement ainsi cela fonctionne exactement comme je le souhaite.

    Attendons de voir si d'autres solutions "plus propres" sont proposées...

    Merci

  4. #4
    Membre averti
    Inscrit en
    Avril 2010
    Messages
    239
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 239
    Points : 313
    Points
    313
    Par défaut
    Bonjour,

    C'est très propre comme solution, vous pouvez faire ceci dans votre catch :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String donneeEntree = scan.next();
    System.out.println("NumberFormatException: vous n'avez pas entré un double : " + donneeEntree);
    rep = 1;
    Par contre, il faudrait peut être fermer le Scanner (scan.close()) à la fin du main ...

Discussions similaires

  1. Try Catch (?) sur une erreur d'accès mémoire
    Par Jflop91 dans le forum Langage
    Réponses: 1
    Dernier message: 26/03/2013, 15h36
  2. TRY/CATCH sur xp_cmdshell et xp_delete_file
    Par Kaoru-tabris dans le forum Développement
    Réponses: 8
    Dernier message: 14/09/2010, 17h05
  3. Interrogation sur : Try.Catch.Finally
    Par Seth77 dans le forum C#
    Réponses: 7
    Dernier message: 16/09/2008, 11h22
  4. Précision sur le try/catch
    Par Faiche dans le forum Langage
    Réponses: 2
    Dernier message: 13/07/2007, 21h18
  5. Erreur de runtime sur un try ... catch
    Par Floréal dans le forum C++
    Réponses: 14
    Dernier message: 09/09/2005, 19h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo