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 :

Classe et héritage, Problème de variable


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 231
    Par défaut Classe et héritage, Problème de variable
    Bonjour,

    Je crée un MasterMind dans le cadre d'un exercice pour la fac. Le but n'est pas de vous demander la solution ni de la pomper.

    J'ai créée mes classes de mon programme.
    Lorsqu'on lance le programme il demande le nombre de pions à deviner, le nombre de couleurs(ici remplace par les chiffres), et le nombres de tentatives.

    quand le prog me demande le nombre de pions (exemple je lui informe 8). J'ai mis une ligne de test qui m'affiche le nombre de pions (ici nbPions), il va m'indiquer dans tous les cas 4 alors que précédemment je lui ai indiqué 8.
    Alors est ce un problème de variable qui passe pas à travers les classes ou autres?

    Pourriez vous me conseiller sur le fait que la valeur de la variable nbPions ne soit pas celle attendue.
    Si vous avez d'autres conseils pour le prog, je suis preneur.

    Voici mes fichiers.

    Jeu.java
    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
     
    public class Jeu {
    	//on déclare les variables suivantes qu'on aura besoin pour le jeu
    	protected int nbPions;
    	protected int nbCouleurs;
    	protected int nbTentatives;
     
    	//on déclare un constructeur par défaut en initialisant les variables.
    	public Jeu(){ setJeu(4,5,5); }
    	// on déclare un constructeur dans le cas où les variables sont proposées
    	public Jeu( int a, int b, int c) { setJeu (a,b,c);}
    	// on déclare la méthode qui va initialiser toutes ces variables pour ce jeu (surcharge)
    	public void setJeu(int a, int b, int c){
     
    		nbPions=a;
    		nbCouleurs=b;
    		nbTentatives=c;
     
    	}
    	//on définit une méthode qui retourne les variables demandées
    	public int getnbPions(){return nbPions;}
    	public int getnbCouleurs(){return nbCouleurs;}
    	public int getnbTentatives(){return nbTentatives;}
    	// on surcharge le TOstring
    	public String toString() { return "la classe est définie par nb de pions="+nbPions+" nb de couleurs="+nbCouleurs+" nb de tentatives="+nbTentatives;}
     
    }
    Partie.java
    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    //sert à la lecture au clavier
    import java.util.Scanner;
     
    public class Partie extends Jeu{
    	// on crée une combinaison à n cellules selon ce qu on a déclaré dans le constructeur
    	protected int [] combinaison; 
    	//on crée une variable qui va acceuillir la réponse
    	protected int [] reponse;
    	//on définit les constructeurs par défaut
    	public Partie(){ setPartie();}
    	//on déclare la méthode qui va définir la combinaison
    	public void setPartie(){
    		System.out.print("ok"+nbPions);
    		//on définit le nombre de pions dans la combinaison
    		combinaison = new int[nbPions];
    		//on introduit
    		System.out.println("Vous allez définir votre combinaison:");
    		// on donnes des valeurs à la combinaisons, il faut passer sur chaque positions du tab
    		for (int i=0; i<nbPions; i++){
    			//ceci sert pour la lecture au clavier.
    			Scanner clavier = new Scanner (System.in);
     
    			System.out.print("Choisissez un chiffre entre 0 et 9? ");
    			int tmp = clavier.nextInt();
    			combinaison[i]=tmp;
    		}
     
    	}
    	//une méthode pour retourner la combinaison. On affiche chaque él du tableau
    	public void getCombinaison(){
    		System.out.print("la combinaison est: ");
    		for (int i=0;i<nbPions;i++){
    			System.out.print(combinaison[i]+" ");
    		}
    	}
    	//on surcharge toString
    	public String toString(){ return "la combinaison a "+nbPions+" couleurs";}
     
    	//on lit la réponse dans une méthode
    	public void setReponse(){
    		// on définit le nombre d'el qui compose la réponse
    		reponse =new int[nbPions];
    		//on introduit
    		System.out.println("Vous allez définir votre réponse:");
    		// on donnes des valeurs à la reponse, il faut passer sur chaque positions du tab
    		for (int i=0;i<nbPions;i++){
    			//	ceci sert pour la lecture au clavier.
    			Scanner clavier = new Scanner (System.in);
    			System.out.print("Choisissez un chiffre entre 0 et 9? ");
    			int tmp = clavier.nextInt();
    			reponse[i]=tmp;
    		}
    	}
    	//	une méthode pour retourner la Reponse. On affiche chaque él du tableau
    	public void getReponse(){
    		System.out.print("la reponse est: ");
    		for (int i=0;i<nbPions;i++){
    			System.out.print(reponse[i]+" ");
    		}
    	}
    	//on définit le nombre de pions bien placés
    	public int bienPlaces(){
    		//je définis une variable qui va définir le nombre de pions bien placés
    		int bp=0;
    		//on compare chaque el de la reponse aux el de la combi, et qu elle sont bien placé
    		for (int i=0;i<nbPions;i++){
    			if (reponse[i]==combinaison[i]){
    				bp++;
    			}
    		}
    		return bp;
    	}
    	//on définit le nombre de pions mal placés
    	public  int malPlaces(){
    		//je définis une variable qui va définir le nombre de pions mal placés
    		int mp=0;
    		//on compare chaque el à tous les él afin de voir si il se trouve dans la combi, et dans une autre boucle on fait el par el de la combi
    		for (int j=0;j<nbPions;j++){
    			for (int i=0;i<nbPions;i++){
    				if (reponse[i]==combinaison[i]){
    					mp++;
    				}
    			}
    		}
    		return mp;
    	}
     
    }
    Ici vous trouverez une ligne System.out.print("ok"+nbPions);
    C est ici qu il m indique 4 tout le temps. Et ce n'est pas le 4 que j ai mis par défaut dans le constructeur de Jeu car j'ai déjà changer la valeur par défaut, et il continue à mettre 4.

    Programme.java
    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 Programme {
    	public static void main (String [] args){
     
     
    		//ceci sert pour la lecture au clavier.
    		Scanner clavier = new Scanner (System.in);
    		//on affiche et on demande le nombre de pions, de couleurs et de tentatives
    		System.out.println("Une nouvelle partie va être lancée");
    		System.out.print("Choisissez un nombre de pions: ");
    		int tmpNbPions = clavier.nextInt();
     
    		System.out.print("Choisissez un nombre de couleurs: ");
    		int tmpNbCouleurs = clavier.nextInt();
     
    		System.out.print("Choisissez un nombre de tentatives: ");
    		int tmpNbTentatives = clavier.nextInt();
    		//on appele le constructeur pour les définir
    		Jeu j1 = new Jeu(tmpNbPions,tmpNbCouleurs,tmpNbTentatives);
     
    		/** OK CA MARCHE BIEN    TRACES DE TEST
                    //on va tester si les variables sont enregistrées
                    System.out.println(j1.getnbPions());
                    System.out.println(j1.getnbCouleurs());
                    System.out.println(j1.getnbTentatives());
                    
                    */
     
    		// on va définir une combinaison
    		Partie P1 = new Partie();
    		P1.getCombinaison();
    	}
    }

    D'avance merci pour votre aide

  2. #2
    Membre éprouvé Avatar de totoche
    Inscrit en
    Janvier 2004
    Messages
    1 090
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 090
    Par défaut
    Je suis débutant en java mais il me semble que c'est le mutateur qui pose probleme
    public Jeu(){ setJeu(4,5,5); }

  3. #3
    Membre émérite Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hauts de Seine (Île de France)

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Par défaut
    Salut

    hum...

    tu crées une instance de Jeu ... et une instance de partie.

    En gros qu'est ce qu'il se passe :

    Ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Jeu j1 = new Jeu(tmpNbPions,tmpNbCouleurs,tmpNbTentatives);
    Déclare et initialise la variable j1 en passant par le constructeur Jeu(int, int, int)

    Ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Partie P1 = new Partie();
    Déclare et initialise la variable P1 en passant par le constructeur Partie() qui appelle le constructeur Jeu() qui initialise le nombre de pions à 4.

    Comment remédier :

    Partie (modifs en gras) :
    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
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    //sert à la lecture au clavier
    import java.util.Scanner;
     
    public class Partie extends Jeu{
    	// on crée une combinaison à n cellules selon ce qu on a déclaré dans le constructeur
    	protected int [] combinaison; 
    	//on crée une variable qui va acceuillir la réponse
    	protected int [] reponse;
    	//on définit les constructeurs par défaut
    	public Partie(int a, int b, int c) {
    		super(a, b, c); 
    		setPartie();
    	}
    	//on déclare la méthode qui va définir la combinaison
    	public void setPartie(){
    		System.out.print("ok"+nbPions);
    		//on définit le nombre de pions dans la combinaison
    		combinaison = new int[nbPions];
    		//on introduit
    		System.out.println("Vous allez définir votre combinaison:");
    		// on donnes des valeurs à la combinaisons, il faut passer sur chaque positions du tab
    		for (int i=0; i<nbPions; i++){
    			//ceci sert pour la lecture au clavier.
    			Scanner clavier = new Scanner (System.in);
    			
    			System.out.print("Choisissez un chiffre entre 0 et 9? ");
    			int tmp = clavier.nextInt();
    			combinaison[i]=tmp;
    		}
    		
    	}
    	//une méthode pour retourner la combinaison. On affiche chaque él du tableau
    	public void getCombinaison(){
    		System.out.print("la combinaison est: ");
    		for (int i=0;i<nbPions;i++){
    			System.out.print(combinaison[i]+" ");
    		}
    	}
    	//on surcharge toString
    	public String toString(){ return "la combinaison a "+nbPions+" couleurs";}
    	
    	//on lit la réponse dans une méthode
    	public void setReponse(){
    		// on définit le nombre d'el qui compose la réponse
    		reponse =new int[nbPions];
    		//on introduit
    		System.out.println("Vous allez définir votre réponse:");
    		// on donnes des valeurs à la reponse, il faut passer sur chaque positions du tab
    		for (int i=0;i<nbPions;i++){
    			//	ceci sert pour la lecture au clavier.
    			Scanner clavier = new Scanner (System.in);
    			System.out.print("Choisissez un chiffre entre 0 et 9? ");
    			int tmp = clavier.nextInt();
    			reponse[i]=tmp;
    		}
    	}
    	//	une méthode pour retourner la Reponse. On affiche chaque él du tableau
    	public void getReponse(){
    		System.out.print("la reponse est: ");
    		for (int i=0;i<nbPions;i++){
    			System.out.print(reponse[i]+" ");
    		}
    	}
    	//on définit le nombre de pions bien placés
    	public int bienPlaces(){
    		//je définis une variable qui va définir le nombre de pions bien placés
    		int bp=0;
    		//on compare chaque el de la reponse aux el de la combi, et qu elle sont bien placé
    		for (int i=0;i<nbPions;i++){
    			if (reponse[i]==combinaison[i]){
    				bp++;
    			}
    		}
    		return bp;
    	}
    	//on définit le nombre de pions mal placés
    	public  int malPlaces(){
    		//je définis une variable qui va définir le nombre de pions mal placés
    		int mp=0;
    		//on compare chaque el à tous les él afin de voir si il se trouve dans la combi, et dans une autre boucle on fait el par el de la combi
    		for (int j=0;j<nbPions;j++){
    			for (int i=0;i<nbPions;i++){
    				if (reponse[i]==combinaison[i]){
    					mp++;
    				}
    			}
    		}
    		return mp;
    	}
    	
    }
    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
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    import java.util.Scanner;
     
     
    public class Programme {
    	public static void main (String [] args){
     
     
    		//ceci sert pour la lecture au clavier.
    		Scanner clavier = new Scanner (System.in);
    		//on affiche et on demande le nombre de pions, de couleurs et de tentatives
    		System.out.println("Une nouvelle partie va être lancée");
    		System.out.print("Choisissez un nombre de pions: ");
    		int tmpNbPions = clavier.nextInt();
     
    		System.out.print("Choisissez un nombre de couleurs: ");
    		int tmpNbCouleurs = clavier.nextInt();
     
    		System.out.print("Choisissez un nombre de tentatives: ");
    		int tmpNbTentatives = clavier.nextInt();
    		//on appele le constructeur pour les définir
     
    		// on va définir une combinaison
    		Partie P1 = new Partie(tmpNbPions,tmpNbCouleurs,tmpNbTentatives);
    		P1.getCombinaison();
    	}
    }
    Enfin, si tu ne voyais pas ton erreur, je te conseille de refaire un tour dans la théorie de la programmation OO !!! (ce n'est pas un reproche)

    tchuss

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 231
    Par défaut
    Effectivement je foid faire un tour dans mon bouquin, pas encore eu le temps.

    Je te remercie de tes remarques. Je vais tester ca aujourd'hui.

    Merci encore.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 231
    Par défaut
    niquel c'est bien ca. Je vais relire donc mon book.

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

Discussions similaires

  1. Problème de variable membre en pointeur dans une classe
    Par medrimonia dans le forum Langage
    Réponses: 2
    Dernier message: 09/06/2012, 18h00
  2. [POO] Problème de classes et héritage
    Par Kabanon dans le forum Langage
    Réponses: 1
    Dernier message: 25/10/2007, 12h37
  3. [Débutant] Problème de variables
    Par bonnefr dans le forum SWT/JFace
    Réponses: 9
    Dernier message: 12/05/2004, 17h41
  4. [servlet]problème de variable jamais nulle
    Par omega dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 18/03/2004, 09h31
  5. [Class/PHP/Postgres] Problème de modélisation...
    Par k-reen dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 27/02/2003, 08h49

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