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 :

Boucle qui ne se lance pas


Sujet :

Langage Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 8
    Points : 2
    Points
    2
    Par défaut Boucle qui ne se lance pas
    Bonjour,

    Alors voilà, je débute en JAVA et le chapitre des boucles me pose problème x)
    J'ai fais ceci :

    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
    35
    36
    37
    38
    39
    import java.util.Scanner;
     
     
    public class Test2 
    {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		String prenom;
    		char reponse = '0';
    		Scanner vieux = new Scanner (System.in); 
    		while (reponse == '0');
    		{
    			System.out.println("Donne moi ton prénom");
    			prenom = vieux.nextLine();
    			System.out.println("Es- Tu sur de ton prénom ? (O/N");
    			reponse = vieux.nextLine().charAt(0);
     
    		}
     
    		String continu;		
    		char reponse2 = '2';
    		Scanner deux = new Scanner (System.in);
    		while (reponse2 == '2');
    				{
    					System.out.println("Essaye encore =P");
    					continu = deux.nextLine();
    					System.out.println("Veux-tu arrêter ? (O/N)");
    					reponse2 = vieux.nextLine().charAt(2);
     
    				}
    				System.out.println("Au revoir");
     
     
    				}
    }


    Le problème est que quand je lance la boucle, mise à part faire lag mon pc rien ne se passe ^^'

    Merci d'avance de votre aide =)

  2. #2
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Va voir une discussion juste à côté sur le même thème ici.

    PS : Et pense au balise [CODE] pour afficher ton code sur le forum.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Hum, la personne en question a son code qui se lance, moi rien ne se lance ^^'

  4. #4
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Citation Envoyé par Shunsuii Voir le message
    Hum, la personne en question a son code qui se lance, moi rien ne se lance ^^'
    La réponse sera pourtant bien similaire.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Shunsuii Voir le message
    Hum, la personne en question a son code qui se lance, moi rien ne se lance ^^'
    Le code que tu nous montres commence par afficher 'Donne moi ton prénom' puis attend que tu appuies sur entrée.
    Aucun des deux ne fait lag le pc.

    Je ne sais pas précisément ce que tu fais, mais ça n'exécute pas le code que tu nous montres.
    (Je suis d'accord par contre, que comme tu compares des caractères et non pas des String, ça n'a rien à voir avec la discussion suscitée.)

    Citation Envoyé par Robin56 Voir le message
    La réponse sera pourtant bien similaire.
    Pas avec le code présenté, non. Les symptômes des deux discussions sont différents, les symptômes évoqués ici ne correspondent pas au code présenté ici.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Comme tu le dis, le code devrait normalement lancer "Donne moi ton prénom", et la seul chose que je fais est de cliquer sur "Run" qui ne fait "Run" rien ^^' Je suis complétement largué sur ce coup -.-

  7. #7
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Citation Envoyé par thelvin Voir le message
    (Je suis d'accord par contre, que comme tu compares des caractères et non pas des String, ça n'a rien à voir avec la discussion suscitée.)
    My mistake, j'avais zappé que les comportements différaient entre char et String.

    Je n'ai pas d'Eclipse sous la main mais dans des soucis comme ça, passe ton programme en mode debug pour vérifier pas à pas, où il se plante.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Hum dans l'onglet problèmes, j'ai le droit à :

    - The value of the local variable prenom is not used.
    - The value of the local variable continu is not used.

  9. #9
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Points : 1 745
    Points
    1 745
    Par défaut
    En enlevant les ";" après les while ça devrait mieux marcher

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while (reponse == '0')
    {
    à la place de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while (reponse == '0'); // ; en trop
    {

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Merci Mathieu.J, c'était effectivement çà... un ; mal placé peut tout faire planter, je le saurai maintenant =o

    Merci encore à vous pour vos réponses rapide =)

  11. #11
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Citation Envoyé par Mathieu.J Voir le message
    En enlevant les ";" après les while ça devrait mieux marcher
    Étrange que ce soit passé à la compilation
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    C'est passé à la compilation car je pense mais pas sur ( je viens de passer à ce cours ) du au fait que se soit une boucle while et non do while ( avec la do while on se doit de mettre un ; mais pas dans la boucle while ) Arretez moi bien sur si je me trompe ^^'

  13. #13
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Mathieu.J Voir le message
    En enlevant les ";" après les while ça devrait mieux marcher
    Bien vu, du coup c'était bien le bon code, je l'ai juste mal copié -_-°.

    Citation Envoyé par Robin56
    Étrange que ce soit passé à la compilation
    Dommage mais pas étrange. Le compilateur de référence Java ne l'interdit pas, car il ne cherche pas à vérifier qu'une boucle de ce genre ne se finit jamais.
    Parfois on veut faire une boucle de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while(doSomethingAndGetResult() != null) {
     // on fait rien, on boucle tant que la condition est vraie
    }
    et ça peut se réécrire en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(doSomethingAndGetResult() != null);

    Citation Envoyé par Mathieu.J
    C'est passé à la compilation car je pense mais pas sur ( je viens de passer à ce cours ) du au fait que se soit une boucle while et non do while ( avec la do while on se doit de mettre un ; mais pas dans la boucle while ) Arretez moi bien sur si je me trompe ^^'
    C'est bien de comprendre qu'il y a une différence. Mais le principe est le suivant :

    - un do while, ça a cette structure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    do
      instruction;
    while(condition);
    - un while classique ça a cette structure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while(condition)
      instruction;
    Comme tu vois, les deux se terminent par un ;

    Le truc c'est que tout ce qui est de la forme

    peut être écrit sous forme de bloc d'instructions :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    {
      instruction1;
      instruction2;
      ...
      instructionN;
    }
    ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    do {
      instruction1;
      ...
      instructionN;
    } while(condition);
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while(condition) {
      instruction1;
      ...
      instructionN;
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  14. #14
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 316
    Points
    8 316
    Billets dans le blog
    52
    Par défaut
    C'est passé à la compilation parce qu'il y a aucune erreur de syntaxe.

    Bonjour,
    Je vais donnée ma version du code ici :
    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
    35
    import java.util.Scanner;
     
     
    public class Test2 
    {
     
    	/**
             * @param args
             */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		String prenom;
    		String continu;
    		Scanner scanner = new Scanner (System.in);
    		boolean reponse = false;
    		while (!reponse);
    		{
    			System.out.println("Donne moi ton prénom");
    			prenom = scanner.nextLine();
    			reponse = doQuestionGoOn(scanner);
    		}
    		reponse = false;
    		while (!reponse);
    		{
    			System.out.println("Essaye encore =P");
    			continu = scanner.nextLine();
    			reponse = doQuestionGoOn(scanner);
    		}
    		System.out.println("Au revoir");
    	}
    	public static boolean doQuestionGoOn(Scanner scanner){
    		System.out.println("Veux-tu arrêter ? (O/N)");
    		return scanner.nextLine().equals('O');
    	}
    }
    Et les explications là :
    Règles numéro 1 :
    On utilise un boolean quand on a besoin d'un boolean.
    Donc "reponse" est un boolean
    Règles numéro 2 :
    On ne crée pas un objet, alors qu'on en a déjà un qui fait le même job.

    Scanner vieux/ Scanner deux ?
    Pourquoi scanner vieux n'est plus utilisable ? Il a prix 150 ans en 12 lignes ?

    Règles numéro 3 :
    On lit la javadoc des méthodes avant de les utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vieux.nextLine().charAt(2);
    charAt renvoie le caractère à la seconde position. Et on commence à 0.
    Sauf qu'on demande à l'utilisateur d'en taper un seul.
    Que renvoie charAt du coup ?
    Réponse :
    IndexOutOfBoundsException - if the index argument is negative or not less than the length of this string.
    Je vous invite à voir la source ici !

    Étant donné qu'on demande à l'utilisateur une seule lettre, j'ai fait une simple comparaison de string. (Les String sont des objets donc pas de ==)

    Cordialement,
    Patrick Kolodziejczyk

    PS : J'ai pas testé le code, mais je pense qu'il fonction.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  15. #15
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Dommage mais pas étrange. Le compilateur de référence Java ne l'interdit pas, car il ne cherche pas à vérifier qu'une boucle de ce genre ne se finit jamais.
    Parfois on veut faire une boucle de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while(doSomethingAndGetResult() != null) {
     // on fait rien, on boucle tant que la condition est vraie
    }
    et ça peut se réécrire en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(doSomethingAndGetResult() != null);
    Ah oui en effet, et donc on peut aussi écrire dans du code Java des blocs { ... } sans if, while ou je ne sais quoi alors à ce que je vois.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  16. #16
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Curiosité me gagne =o
    Pourquoi le fait que je mette deux Scanner soit gênant ?
    Est ce que dans d'autre cas plus approfondis que celui ci çà causerait des erreurs ou alors c'est sans importance ?

    PS: Ton code est je pense erroné car en le testant impossible de passer à la ligne " Au revoir " malgré plusieurs tentative. ( J'ai peut être fait la mauvaise manip mais j'en doute )

    PS2: le charAt(2) je l'ai modifié après mon message, j'ai sans doute fais une faute de frappe en voulant mettre 0 =)

  17. #17
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par kolodz Voir le message
    C'est passé à la compilation parce qu'il y a aucune erreur de syntaxe.
    Certains codes ne compilent pas même sans erreur de syntaxe.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while(true) {
      // rien, on boucle sans fin.
    }
    faireQuelqueChose();
    Pas d'erreur de syntaxe, mais le compilateur détecte que ce qu'il y a après la boucle est inatteignable, et refuse la compilation.
    C'est très similaire. La différence c'est que true est une expression constante.

    Citation Envoyé par Shunsuii
    Pourquoi le fait que je mette deux Scanner soit gênant ?
    Un Scanner consomme les caractères de la source qu'il lit, et en maintient un état et un buffer de ce qui a été lu.
    Si plus d'un buffer lisent à partir d'une même source, ils ne peuvent pas le deviner, quand l'un lit quelque chose, il ne sait pas ce que l'autre a déjà lu et bufferisé, et ne va pas aller lui dire ce que lui lit et bufferise. Cela corrompt l'état des deux, et fait disparaître ou apparaître des caractères aléatoirement.

    Par contre, rien n'empêche d'en faire un seul et de ne passer que par celui-là.

    Citation Envoyé par Shunsuii
    Est ce que dans d'autre cas plus approfondis que celui ci çà causerait des erreurs ou alors c'est sans importance ?
    On ne peut pas dire. Cela dépend de plusieurs choses, notamment à quel point les Scanner bufferisent. Et ça on ne peut pas le prédire : on sait ce qu'un Scanner fait, mais pas comment il le fait. Du moment qu'on ne met pas plusieurs scanners sur la même source ce n'est pas un problème.

    Disons que c'est sans importance : dans le doute c'est toujours un problème.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  18. #18
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Je te remercie de tes précisions très utile =)
    Effectivement, un Scanner suffit pour tout, j'aurais dû essayer avant d'en mettre deux -.-

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

Discussions similaires

  1. Serveur Xorg sur debian testing qui ne se lance pas
    Par Cyrius dans le forum Applications et environnements graphiques
    Réponses: 7
    Dernier message: 01/01/2006, 23h25
  2. Tâche qui ne se lance pas avec cron
    Par bugalood dans le forum Administration système
    Réponses: 3
    Dernier message: 17/10/2005, 18h13
  3. Réponses: 3
    Dernier message: 16/09/2005, 10h01
  4. mmc.exe qui ne se lance pas
    Par r0d dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 27/04/2005, 17h11

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