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 :

Programme ne s'executant pas comme il le devrait


Sujet :

avec Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut Programme ne s'executant pas comme il le devrait
    Bonsoir , suite à la fin de mon premier module de JAVA en première année de DUT info je me suis lancé dans la confection d'un jeu tout simple , générant un nombre au hasard l'utilisateur devant le trouver, mon seul problème est que le programme me "zappe" une partie , voila ce qu'il se passe quand j'execute le programme ==>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Choissisez la limite superieure
     
    10
     
    Le nombre a trouver est entre 0 et 10
     
    Le nombre genere est : 7
    Choissisez le nombre de tentatives
     
    4
    Vous avez 4 tentatives
     
    tentative = 1
    trouve = false
    Et il s'arrête la sans demander de valeur , le seul moyen pour le faire aller plus loin est de mettre tentative = nbtentatives quand on l'execute et il passe a la fin du programme en indiquant que la personne n'as pas trouvé le nombre ...

    Le code du programme est

    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    import java.util.Scanner;
    import java.util.Random;
     
    class TrouveNb {
    	public static void main (String [] args) {
     
    	//Initialisation du scanner, du générateur et des variables de test
    	Scanner sc = new Scanner (System.in);
    	Random r = new Random();
    	int tentative = 1;
    	int nbTentative;
    	boolean trouve = false;
     
    	//Choix de l'intervalle
    	System.out.println ("Choissisez la limite superieure (nombre maximum a deviner)\n");
    	int borneSup = sc.nextInt();
    	System.out.println (" \nLe nombre a trouver est entre 0 et "+borneSup+" \n ");
     
    	//Création du nombre a deviner
    	int nombre = r.nextInt (borneSup);
     
    	// Pour test ==> Affiche le nombre genere
    	System.out.println (" \nLe nombre genere est: "+nombre+" \n ");
     
     
    	//Choix du nombre de tentative
    	System.out.println ("Choissisez le nombre de tentative \n ");
    	nbTentative = sc.nextInt();
    	System.out.println (" \n Vous avez "+nbTentative+" tentatives \n ");
     
    	//Pour test
    	System.out.println ("tentative = "+tentative);
    	System.out.println ("trouve = "+trouve);
     
    	//Debut du jeu
    	while ((tentative < nbTentative) && (trouve = false)) {
    		System.out.println (" \n Entrer un nombre \n ");
    		int v = sc.nextInt();
    		if (v == nombre) {
    			trouve = true;
    			System.out.println(" \nVous avez trouve le nombre! Bravo!");
    		}
    		else {
    			if (v < nombre) {
    				System.out.println(" \nLe nombre a trouver est inférieur a "+v+" \n ");
    				tentative ++;
    			}
    			else {
    				System.out.println(" \nLe nombre a trouver est supérieur a "+v+" \n ");
    				tentative ++;
    			}
    		}
    	}
    	if (tentative >= nbTentative) {
    		System.out.println (" \nDesole , vous n'avez pas trouve le nombre!");
    	}
    	}
    }

    Merci d'avance pour vos indications

  2. #2
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    Salut,

    Il y a deux erreurs sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ((tentative < nbTentative) && (trouve = false)) {
    car le nombre de tentatives possible sera inférieur de 1 à ce que l'on a demandé, et tu ne teste pas trouve, mais fait une affectation.

    et une erreur sur :
    Le message obtenu (suite à l'alternative) ne correspond pas à la réalité de la situation.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par visiwi Voir le message
    Il y a deux erreurs sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ((tentative < nbTentative) && (trouve = false)) {
    car le nombre de tentatives possible sera inférieur de 1 à ce que l'on a demandé, et tu ne teste pas trouve, mais fait une affectation.
    Pour le nombre de tentatives effectivement il faut que je l'initialise à 0 , j'avais pas fait gaffe à ca

    Citation Envoyé par visiwi Voir le message
    et une erreur sur :
    Code :

    if (v < nombre) {

    Le message obtenu (suite à l'alternative) ne correspond pas à la réalité de la situation.
    Comment pourrais-je faire ???

    Merci pour les réponses


    EDIT: Trouvé pour le message en fait il fallait inverser inférieur et supérieur

  4. #4
    Membre expérimenté
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Points : 1 340
    Points
    1 340
    Par défaut
    OK, maintenant cela doit fonctionner correctement ?

  5. #5
    Membre averti Avatar de clubist
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2008
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Maine et Loire (Pays de la Loire)

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

    Informations forums :
    Inscription : Février 2008
    Messages : 217
    Points : 301
    Points
    301
    Par défaut Programme Complet
    Bonjour,

    Bon pour corriger votre programme, vous veuillez procéder comme ça ;
    1- NbTentative doit être supérieur à 0 et donc le programme n’accepte qu’une valeur strictement supérieure e à zéro.

    2- Si vous initialiserez tentative à 0 la condition de boucle sera (tentative<NbTentative) et la condition dans laquelle on l’affiche qu’il n’a pas trouvé la solution est (tentative >= nbTentative), mais si vous l’initialiserez à 1 la condition doit être (tentative<=NbTentative) et la condition dans laquelle on l’affiche qu’il n’a pas trouvé la solution devient (tentative > nbTentative)
    Et dans les deux cas le nombre d’itération ne dépassera jamais le nombre d’tentatives

    3- Pour tester la valeur boolienne Trouve si elle est mise à false vous devez le coder (!trouve).

    4- Vous veuillez inverser la condition (remplacer "v< nombre" par "v> nombre" pour dire au joueur que la valeur à chercher est inférieure au nombre aléatoire choisi par l’ordinateur).

    5- Vous allez remarque que j’ai ajouté un boucle while au début de programme pour permettre à l’ utilisateur de rejouer ce jeu s’il veut par l’appuie sur " y ".

    Le code final sera :
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    import java.util.Scanner;
    import java.util.Random;
     
    class TrouveNb {
    	public static void main (String [] args) {
    boolean rejouer= true;
            while(rejouer){
    	//Initialisation du scanner, du générateur et des variables de test
    	Scanner sc = new Scanner (System.in);
    	Random r = new Random();
    	int tentative = 1;
    	int nbTentative=0;
    	boolean trouve = false;
     
     
    	//Choix de l'intervalle
    	System.out.println ("Choissisez la limite superieure (nombre maximum a deviner)\n");
    	int borneSup = sc.nextInt();
    	System.out.println (" \nLe nombre a trouver est entre 0 et "+borneSup+" \n ");
     
    	//Création du nombre a deviner
    	int nombre = r.nextInt (borneSup);
     
    	// Pour test ==> Affiche le nombre genere
    	System.out.println (" \nLe nombre genere est: "+nombre+" \n ");
     
     
    	//Choix du nombre de tentative
    	System.out.println ("Choissisez le nombre de tentative \n ");
    	// nbTentative doit etre supérieure à 0
        while (nbTentative<=0){
        nbTentative = sc.nextInt();
        if(nbTentative<=0)
    	System.out.println (" Nombre de tentative doit etre superieure à 0");
        }
        System.out.println (" \n Vous avez "+nbTentative+" tentatives \n ");
     
    	//Pour test
    	System.out.println ("tentative = "+tentative);
    	System.out.println ("trouve = "+trouve);
     
    	//Debut du jeu
    	while ((tentative <= nbTentative) && (!trouve)) {
    		System.out.println (" \n Entrer un nombre \n ");
    		int v = sc.nextInt();
    		if (v == nombre) {
    			trouve = true;
    			System.out.println(" \nVous avez trouve le nombre! Bravo!");
    		}
    		else {
    			if (v > nombre) {
    				System.out.println(" \nLe nombre a trouver est inférieur a "+v+" \n ");
    				tentative ++;
    			}
    			else {
    				System.out.println(" \nLe nombre a trouver est supérieur a "+v+" \n ");
    				tentative ++;
    			}
    		}
    	}
    	if (tentative > nbTentative) {
    		System.out.println (" \nDesole , vous n'avez pas trouve le nombre!");
    	}
     
    //Demeander au joueur s'il veut rejouer une autre fois
        System.out.println (" Pour rejouer vous veuillez taper y sinon pour quitter appuyer sur n'importe quelle touche");
        String choix = sc.next();
        if(choix.compareTo("y")==0)rejouer=true;
        else rejouer=false;
        }
        }
        }
    J'ai testé ce code et il s'exécute comme vous voulez exactement.

  6. #6
    Membre chevronné Avatar de Mister Nono
    Homme Profil pro
    Ingénieur Mathématiques et Informatique
    Inscrit en
    Septembre 2002
    Messages
    2 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur Mathématiques et Informatique
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2002
    Messages : 2 232
    Points : 1 897
    Points
    1 897
    Par défaut
    Citation Envoyé par visiwi Voir le message
    Salut,

    Il y a deux erreurs sur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while ((tentative < nbTentative) && (trouve = false)) {
    car le nombre de tentatives possible sera inférieur de 1 à ce que l'on a demandé, et tu ne teste pas trouve, mais fait une affectation.

    et une erreur sur :
    Le message obtenu (suite à l'alternative) ne correspond pas à la réalité de la situation.
    D'où l'importance de l'analyse et aussi de réaliser une trace du bout de code qui ne fonctionne pas correctement.

    A+
    La connaissance ne sert que si elle est partagée.
    http://ms2i.net

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

Discussions similaires

  1. Script qui ne s'execute pas comme voulu
    Par Kalork dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/12/2013, 21h40
  2. Trigger qui ne s'execute pas comme prévu
    Par bringer dans le forum SQLite
    Réponses: 2
    Dernier message: 16/11/2009, 21h54
  3. le programme ne s'execute pas dans certains cas
    Par djaval0221 dans le forum C++
    Réponses: 2
    Dernier message: 15/05/2008, 15h14
  4. Réponses: 1
    Dernier message: 15/05/2006, 12h28
  5. Savoir si un programme est en execution ou pas.
    Par alan8 dans le forum Windows
    Réponses: 5
    Dernier message: 29/08/2005, 11h22

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