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

avec Java Discussion :

boucle while infinie


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    PARIS
    Inscrit en
    Février 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PARIS

    Informations forums :
    Inscription : Février 2021
    Messages : 5
    Par défaut boucle while infinie
    Bonsoir,
    je n'ai pas trouvé de sujet traitant mon problème dans le forum, ou bien j'ai mal cherché.

    je suis confronté à une boucle infinie et je ne comprends pas pourquoi .

    mon code consiste à forcer à l'utilisateur de saisir un nombre entier. tant que ce dernier rentre autre chose qu'un entier, le programme redemande une nouvelle saisie.
    le code contrôle que la saisie est bien un entier et réalise le test ensuite.

    A l'exécution, quand je rentre un nombre entier ça marche.

    Par contre quand je saisie autre chose, je me retrouve avec une boucle infinie. j'ai fait une exécution pas à pas en mode debug et je constate que la valeur du booléen b1 ne change pas une fois qu'il a pris la valeur "false" et je ne comprends pas pourquoi .

    Quelqu'un peut m'expliquer pourquoi mon code boucle à l'infini si je ne rentre pas un entier.

    Merci

    voici mon code
    Images attachées Images attachées  

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 974
    Par défaut
    Scanner implémente AutoCloseable.


    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.Scanner;
     
    public class App {
     
        public static void main( String[] args ){
     
    		int a =0;
    		boolean b1= false;
     
     
    		try(Scanner lecteur = new Scanner(System.in)){
     
    			while(!b1){
    				System.out.println("entrez un nombre entier");
     
    				b1 = lecteur.hasNextInt();
     
    				if (b1){
    					a = lecteur.nextInt();
    				}
    				else{
    					System.out.println("vous n'avez pas saisi un nombre entier");
    				}
     
    				if(lecteur.hasNextLine()){
    					lecteur.nextLine();
    				}
    			}
     
    		}
    	}
    }

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    PARIS
    Inscrit en
    Février 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PARIS

    Informations forums :
    Inscription : Février 2021
    Messages : 5
    Par défaut boucle infinie
    Merci plawyx pour ton retour
    Ta solution répond très bien à mon problème; même en le transformant en Do ...while, ça marche

    est-ce que tu peux m'expliquer pourquoi j'ai une boucle infinie avec mon code quand je rentre autre chose qu'un entier ?

    Merci

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hello,

    c'est parce que quand tu détectes que ce qu'il y a à lire n'est pas un int, tu ne fais rien. Littéralement rien, et notamment pas lire ce qu'il y avait à lire, donc pas changer ce qui peut se passer si tu recommences la même chose.

    Si tu demandes deux fois de suite si ce qu'il y a à lire est un int, ça ne change absolument rien au fait que non, ce n'est pas un int. Pareil si tu le fais autant de fois que tu veux.

    La solution est donc de lire ce qu'il y avait à lire pour que ce ne soit plus là, puis l'oublier, et seulement ensuite appeler hasNextInt().

    Il n'est pas franchement nécessaire de fermer les ressources que tu n'as pas ouvertes, et la gestion proposée des lignes n'est pas forcément géniale.

    (En fait quand on fait de l'interaction avec l'utilisateur, comme lui demander de taper un nombre, il vaut mieux utiliser uniquement des lignes, et jamais hasNextInt()/nextInt())
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    PARIS
    Inscrit en
    Février 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PARIS

    Informations forums :
    Inscription : Février 2021
    Messages : 5
    Par défaut Boucle infinie
    Merci thelvin pour l'explication.
    c'est tres clair et vraiment très utile, car je risque de refaire les mêmes bêtises;

    Merci à tous pour votre aide

    je clos le sujet

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Boucle while infinie
    Par marcilles dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 27/12/2018, 09h49
  2. Boucle while infini avec SESSION
    Par ZeeKinio dans le forum Langage
    Réponses: 8
    Dernier message: 29/01/2018, 22h28
  3. Boucle while infinie
    Par BlackoOSX dans le forum Arduino
    Réponses: 5
    Dernier message: 20/06/2016, 21h24
  4. boucle while infini!
    Par guizaniseifislam dans le forum Langage
    Réponses: 2
    Dernier message: 02/03/2012, 01h30
  5. Boucle while infinie
    Par god_enel dans le forum C
    Réponses: 1
    Dernier message: 16/04/2007, 11h35

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