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 :

Problème avec variable dans boucle DO WHILE


Sujet :

Langage Java

  1. #1
    Membre du Club Avatar de bandit_debutant
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 133
    Points : 69
    Points
    69
    Par défaut Problème avec variable dans boucle DO WHILE
    Bonjour,

    j'ai un problème avec le fichier suivant: l'ordinateur calcule au hasard un numéro entre 1 et 10 (d'ailleurs, est-ce que j'ai bien fait cela?), demande un chiffre à l'utilisateur et les compare. Quand le chiffre est le même, il sort de la boucle. Mais Eclipse me signale un problème au niveau de la ligne
    while (nb1!=x)

    et je ne sais pas pourquoi, elle est certainement mal placée, mais je ne vois pas ce qu'il faut faire.
    Merci de votre aide.

    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
     
    import java.io.*;
     
    public class Devinette {
    	public static void main(String [] args)
    	{
     
    	int x;
    	x=(int)(Math.random()*10);
     
     
    	do {
     
    	System.out.println("Entrez un numéro entre 1 et 10");
    	BufferedReader n1=new BufferedReader(new InputStreamReader(System.in));
    	try
    	{
    		String numero1=n1.readLine();
    		int nb1=Integer.valueOf(numero1);
    	}
    	catch (java.io.IOException e) {}
    	System.out.println ("Le numéro est " +x);
    	}
    	while (nb1!=x);
     
    	System.out.println("Bravo, vous avez gagné!");
     
    	}
    }

  2. #2
    Membre du Club Avatar de bandit_debutant
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 133
    Points : 69
    Points
    69
    Par défaut
    je me suis encore trompée avec la balise CODE. Désolée

  3. #3
    Membre chevronné Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Points : 2 232
    Points
    2 232
    Par défaut
    Il faut surement que tu déclare ta variable nb1 en dehors de ta boucle do while.
    Si ce n'est pas ça donne nous le message d'erreur exacte que tu as à la compilation pour qu'on puisse voir.
    autant l'hiver éclate que l'hétéroclite
    le vrai geek c'est celui qui croit qu'il y a 1024 mètres dans un kilomètre

  4. #4
    Membre du Club Avatar de bandit_debutant
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 133
    Points : 69
    Points
    69
    Par défaut
    Bonjour,

    si je déclare ma variable nb1 en dehors de la boucle, le message est:"Duplicate local variable nb1". C'est logique puisque j'ai déjà ma ligne

    int nb1=Integer.valueOf(numero1);


    Si je laisse le code tel que vous le voyez, le message est:

    Exception in thread "main" java.lang.Error: Unresolved compilation problem:
    nb1 cannot be resolved

    at Devinette.main(Devinette.java:23)

    Je vais essayer de remettre le code comme il faut:

    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
     
    import java.io.*;
     
    public class Devinette {
    	public static void main(String [] args)
    	{
     
    	int x;
    	x=(int)(Math.random()*10);
     
     
    	do {
     
    	System.out.println("Entrez un numéro entre 1 et 10");
    	BufferedReader n1=new BufferedReader(new InputStreamReader(System.in));
    	try
    	{
    		String numero1=n1.readLine();
    		int nb1=Integer.valueOf(numero1);
    	}
    	catch (java.io.IOException e) {}
    	System.out.println ("Le numéro est " +x);
    	}
    	while (nb1!=x);
     
    	System.out.println("Bravo, vous avez gagné!");
     
    	}
    }

  5. #5
    Membre du Club Avatar de TheEwook
    Inscrit en
    Novembre 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2004
    Messages : 44
    Points : 50
    Points
    50
    Par défaut
    Ce que voulais dire guigui c'est de déclarer ta variable nb1 en dehors de la boucle (int nb1)

    et dans ta boucle tu ne fait que rappeler ta variable nb1. (sans le int)


  6. #6
    Membre du Club Avatar de bandit_debutant
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 133
    Points : 69
    Points
    69
    Par défaut
    J'avais testé aussi, mais il y a toujours une erreur sur la même ligne

    while nb1!=x;

    et le message d'erreur donné est:

    Exception in thread "main" java.lang.Error: Unresolved compilation problem:
    The local variable nb1 may not have been initialized

  7. #7
    Membre chevronné Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Points : 2 232
    Points
    2 232
    Par défaut
    Tu devrais essayer de comprendre les messages d'erreur (surtout quand il sont facile) : The local variable nb1 may not have been initialized ça signifie que ta variable peut ne pas avoir été initalisé donc il faut que tu lui donne une valeur au moment ou tu la déclare (à l'extérieur de la boucle).
    autant l'hiver éclate que l'hétéroclite
    le vrai geek c'est celui qui croit qu'il y a 1024 mètres dans un kilomètre

  8. #8
    Membre du Club Avatar de bandit_debutant
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 133
    Points : 69
    Points
    69
    Par défaut
    En effet, mais je croyais que ce n'était pas nécessaire.
    Voici ce que j'ai mis et ça marche:

    int nb1='\0';

    aurais-je pu mettre autre chose?

    Merci beaucoup

  9. #9
    Membre confirmé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2006
    Messages
    572
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 572
    Points : 631
    Points
    631
    Par défaut
    Citation Envoyé par bandit_debutant Voir le message
    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
     
    import java.io.*;
     
    public class Devinette {
    	public static void main(String [] args)
    	{
     
    	int x;
    	x=(int)(Math.random()*10);
     
     
    	do {
     
    	System.out.println("Entrez un numéro entre 1 et 10");
    	BufferedReader n1=new BufferedReader(new InputStreamReader(System.in));
    	try
    	{
    		String numero1=n1.readLine();
    		int nb1=Integer.valueOf(numero1);
    	}
    	catch (java.io.IOException e) {}
    	System.out.println ("Le numéro est " +x);
    	}
    	while (nb1!=x);
     
    	System.out.println("Bravo, vous avez gagné!");
     
    	}
    }
    Bon, même pour un débutant en java, il y a des choses qu'il faut très vite apprendre à ne jamais faire :

    Tu ne déclareras point de variable dans une boucle.
    Tu n'oublieras point de fermer un flux.
    Tu n'utiliseras point 2000 instances d'objet alors qu'une seule suffit.

    (c'est tout pour l'instant)

    -> '\0' c'est un char pas un int, même s'il fait un cast implicite, c'est n'importe quoi.

    -> Tu ouvres un buffered reader sur la console par passage dans ton while, ça va craquer severe.

    -> pour faire un random, tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Random r = new Random();
    x = r.nextInt(10) + 1; // renvoie au hazard dans [0, 10[ donc + 1 pour [1, 10]
    L'idée au final, c'est qqch comme ça
    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
     
    public static void main(String [] args)
    {
      int x = 0;
      int nb = 0;
      BufferedReader br = null;
     
      x = new Random().nextInt(10) + 1;
     
        br = new BufferedReader(new InputStreamReader(System.in));
     
        do
        {
        	System.out.println("Entrer un nombre entre 1 et 10");
        	try
        	{
        		nb = Integer.parseInt(br.readLine());
        	}
        	catch (NumberFormatException nf)
        	{
        		continue;
        	}
        	catch (IOException e)
        	{
        		e.printStackTrace();
                    break;
        	}
        }
        while(nb != x);
     
      // gagné
       // br.close(); !!
      }
    }
    Venez partager vos expériences au sein d'un projet sur slicesofit, agile & amélioration continue

  10. #10
    Membre du Club Avatar de bandit_debutant
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 133
    Points : 69
    Points
    69
    Par défaut
    Merci pour ces précieux conseils.

  11. #11
    Membre du Club Avatar de bandit_debutant
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 133
    Points : 69
    Points
    69
    Par défaut
    Salut Faiche,

    Eclipse est fâché avec Random, saurais-tu pourquoi?
    (j'ai fait import java.math.*

  12. #12
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par bandit_debutant Voir le message
    Eclipse est fâché avec Random, saurais-tu pourquoi?
    (j'ai fait import java.math.*
    Random appartient au package java.util


    Sérieusement avec un EDI comme eclipse pourquoi s'embêter à faire des import * à la main ? Un Ctrl+Espace ou un Ctrl+Shift+O c'est tellement plus simple !

    a++

  13. #13
    Membre chevronné Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Points : 2 232
    Points
    2 232
    Par défaut
    Il te donne quoi comme message d'erreur? Pour quelle ligne?
    autant l'hiver éclate que l'hétéroclite
    le vrai geek c'est celui qui croit qu'il y a 1024 mètres dans un kilomètre

  14. #14
    Membre du Club Avatar de bandit_debutant
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 133
    Points : 69
    Points
    69
    Par défaut
    C'est bon, j'ai trouvé

    import java.util.Random;

    Merci à tous

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

Discussions similaires

  1. problème avec espace dans variable
    Par REMACC1 dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 18/08/2009, 10h47
  2. Problème avec boutons dans une boucle
    Par CHAP26 dans le forum Flash
    Réponses: 2
    Dernier message: 03/06/2008, 14h28
  3. bash: Debordement de valeur avec variable dans 1 while
    Par devloren dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 10/11/2007, 12h14
  4. Problème avec if dans un while.
    Par rutabagas dans le forum C
    Réponses: 7
    Dernier message: 28/02/2007, 12h36
  5. Problème avec TNMSMTP dans une boucle.
    Par Orgied dans le forum Web & réseau
    Réponses: 3
    Dernier message: 07/04/2004, 10h19

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