[LAJ] projet classe Etat - probleme constructeur

Voir le sujet précédent Voir le sujet suivant Aller en bas

[LAJ] projet classe Etat - probleme constructeur

Message  trikman le Mer 24 Mar 2010, 00:23

Bonjour,

voila ma question est simple, je ne comprend pas pourquoi dans mon constructeur sans paramètre il me met une erreur sur la ligne :
Code:
joueurCourant = new Joueur(Couleur.BLANC);
j ai essayé de cette façon la aussi :
Code:
joueurCourant = new Joueur(BLANC);
et encore comme cela :
Code:
Couleur color = Couleur.BLANC;
        joueurCourant = new Joueur(color);

Donc, je n arrive pas a assigné la couleur blanche au joueurCourant "initial"

voici ma classe Etat et ma classe Joueur, je ne note pas la classe couleur elle fait 2 ligne c'est une énumeration

Joueur:
Code:
package dames;
import java.lang.*;
public class Etat {

    Pion[][] plateau;
    Joueur[] joueurs;
    Joueur joueurCourant;
    Joueur joueurGagnant;

    public Etat(Pion[][] plat, Joueur joueurCou, Joueur joueurgagnant, Joueur[] joueur) {
        if(plat == null){
            throw new IllegalArgumentException("le plateau est null");
        }
        if(joueurCou == null){
            throw new IllegalArgumentException("le plateau est null");
        }
        if(joueur == null){
            throw new IllegalArgumentException("le plateau est null");
        }
        this.plateau = plat;
        int i = 1;

        this.joueurs = joueur;
        for(i=1;i<=2;i++){
            if(joueurs[i]==joueurs[i+1]){
                throw new IllegalArgumentException("attention les 2 joueurs sont de meme couleur");
            }
        }
        joueurCourant = joueurCou;
        joueurGagnant = joueurgagnant;
    }

    public Etat() {
        this.plateau = new Pion[10][10];
        this.joueurs = new Joueur[2];
        for(int i=1;i<=2;i++){
            if(joueurs[i]==joueurs[i+1]){
                throw new IllegalArgumentException("attention les 2 joueurs sont de meme couleur");
            }
        }
        Couleur color;
        joueurCourant = new Joueur(Couleur.BLANC);
        joueurGagnant = null;
    }
   
    public Pion[][] getPlateau(){
        return plateau;
    }
    public Joueur[] getJoueurs(){
        return joueurs;
    }
    public Joueur getJoueurCourant(){
        return joueurCourant;
    }
    public Joueur getJoueurGagnant(){
        return joueurGagnant;
    }
    public boolean estFin() {
        if (this.joueurGagnant != null) {
            return true;
        } else {
            return false;
        }
    }
   
    public void  setJoueurCourant(Joueur unJoueur){
        if (unJoueur == null) {
            throw new IllegalArgumentException("joueur null");
        }
        joueurCourant = unJoueur;
    }

    public void setPion(Pion pion, Position position) {
        if (pion == null) {
            throw new IllegalArgumentException("pion invalide");
        }
        if (position == null) {
            throw new IllegalArgumentException("position invalide");
        }
        this.plateau[position.getLigne()][position.getColonne()]=pion;
    }
   

    public Pion getPion(Position position) {
        if (position == null)
            throw new IllegalArgumentException("position invalide");
        return this.plateau[position.getLigne()][position.getColonne()];
    }
    public void setJoueurGagnant(Joueur joueur){
        if(joueur == null){
            throw new IllegalArgumentException("le jeu est toujours en cours!");
        }else{
        this.joueurGagnant = joueur;
        }
    }
    public void changeJoueurCourant(){

    }
    public boolean finPiece(Couleur couleur){
        return true;
    }

et ma classe Joueur :
Code:
package dames;
public class Joueur{

    public Couleur couleur;
    public int PREMIERE_RANGEE;

    public void Joueur(Couleur color){
       
        if (color == Couleur.BLANC) {
            this.couleur = color.BLANC;
        } else {
            this.couleur = color.NOIR;
        }
   if ( couleur==Couleur.BLANC)
       PREMIERE_RANGEE = Jeu.NORD;

   else
            if (couleur==Couleur.NOIR)
                PREMIERE_RANGEE = Jeu.SUD;
    }
    public Couleur getCouleur(){
   return couleur;
    }
    public int getPremiereR(){
   return PREMIERE_RANGEE;
    }
    public String toString(){
   String str = " le joueur de couleur " + this.couleur + " est au " + this.PREMIERE_RANGEE;
   return str;
    }
    public boolean equals(Joueur j){
   if( ! ( j instanceof Joueur))
       return false;

   else
       return true;
    }
}

ps : mis a part ce petit problème, pour ceux qui connaisse un peu le projet ou les autres qui pourraient devinés l'énoncé ^^, si vous remarquez des incohérences ou du travail qui pourrait être plus "propre" faites le moi remarquer cela me sera d'une aide très précieuse car, à mes yeux ce que j'ai dèja fait (il manque 2-3methode dans la classe Etat) est correct et je n'y toucherai plus beaucoup.

Je vous remercie d'avance pour vos reponses,
Martin (l'étudiant en détresse Question )

trikman

Nombre de messages : 68
Prénom : martin
Date d'inscription : 04/11/2009

Revenir en haut Aller en bas

Re: [LAJ] projet classe Etat - probleme constructeur

Message  aro le Mer 24 Mar 2010, 08:24

trikman a écrit:ps : mis a part ce petit problème, pour ceux qui connaisse un peu le projet ou les autres qui pourraient devinés l'énoncé ^^, si vous remarquez des incohérences ou du travail qui pourrait être plus "propre" faites le moi remarquer cela me sera d'une aide très précieuse car, à mes yeux ce que j'ai dèja fait (il manque 2-3methode dans la classe Etat) est correct et je n'y toucherai plus beaucoup.
Ce serait pourtant bien de retourner dans ton code.
Quelques pistes :
- La déclaration des attributs et des constantes
- Les conventions de nommage (plus particulièrement, les noms des paramètres du constructeur d’Etat)
- Les messages des exceptions lancées dans ce même constructeur
- Et, à quoi peut bien servir
Code:
Couleur color;
dans le constructeur sans paramètres d’Etat ? => nettoyer ton code
- Revoir la déclaration de ton « constructeur » Joueur (entre « » car il y a une erreur qui explique pourquoi tu n’arrives pas à instancier un nouveau Joueur dans le constructeur d’Etat)
- Simplifier toutes ces alternatives dans Joueur
- La méthode equals de Joueur est aussi à revoir
- …

aro

Nombre de messages : 557
Prénom : Anne
Statut : Prof
Date d'inscription : 06/09/2008

Revenir en haut Aller en bas

Re: [LAJ] projet classe Etat - probleme constructeur

Message  pbt le Mer 24 Mar 2010, 08:31

Madame Rousseau t'a très bien répondu ...

N'hésite pas à poster le reste de ton code et ne sois pas surpris si tes copains ont un code assez proche du tien ^^.

_________________
smartq.namok.be · faq ·  · IRC / irc.freenode.net #esi · blog.namok.be
style #pbt {heigth:189cm; weight:79kg; eye-color:#524000; hair:very short; dead pixels: some; }

pbt
Admin

Nombre de messages : 4862
Age : 45
Prénom : Pierre
Statut : prof
Localisation : La cité des géants
Date d'inscription : 24/11/2005

http://esi.namok.be

Revenir en haut Aller en bas

Re: [LAJ] projet classe Etat - probleme constructeur

Message  trikman le Mer 24 Mar 2010, 20:00

voila j'ai corrigé tout ce que je pouvais mais je n'arrive toujours pas a créer un joueur blanc ou noir dans ma classe Etat, j'essaye tout et rien ne marche ... Pourtant, j'arrive a créer des pions de couleur .... j'ai demander à un copain mais il vois pas pourquoi ça marche pas.
Ca devient assez embetant car ca m'empeche d'utiliser ma classe TestEtat...
Et j'ai une 2eme question, dans la méthode changeJoueurCourant, étant donné que on ne met pas de Joueur en paramètre , comment peut-on comparer 2 joueurs ? J'ai une hypothèse, en utilisant la méthode getJoueurCourant mais le problème est que je n'arrive pas a créer de joueur, et le second, comment comparer joueurCourant avec l'autre joueur ?

je vous remet le code corrigé comme j ai pu, je rajoute la classe couleur on ne sait jamais ...
J'ai rajoute les import

Joueur :
Code:
package dames;

public class Joueur {

    private Couleur couleur;
    public int PREMIERE_RANGEE;

    public void Joueur(Couleur color) {
        if (color == Couleur.BLANC) {
            this.couleur = color;
            PREMIERE_RANGEE = Jeu.NORD;

        } else {
            this.couleur = color;
            PREMIERE_RANGEE = Jeu.SUD;
        }
    }

    public Couleur getCouleur() {
        return couleur;
    }

    public int getPremiereR() {
        return PREMIERE_RANGEE;
    }

   
    public String toString() {
        String str = " le joueur de couleur " + this.couleur + " est au " + this.PREMIERE_RANGEE;
        return str;
    }

    public boolean equals(Joueur j) {
        if (!(j instanceof Joueur) && !(j.couleur==this.couleur)) {
            return false;
        } else {
            return false;
        }
    }
}
Etat :
Code:
package dames;

import java.lang.*;
import static dames.Couleur.*;
import static dames.Jeu.*;

public class Etat {

    private Pion[][] plateau;
    private Joueur[] joueurs;
    private Joueur joueurCourant;
    private Joueur joueurGagnant;

    public Etat(Pion[][] plateau1, Joueur joueurEnCour, Joueur joueurWinner, Joueur[] tabJoueur) {
        if (plateau1 == null) {
            throw new IllegalArgumentException("le plateau est null");
        }
        if (joueurEnCour == null) {
            throw new IllegalArgumentException("il n'y a pas de joueur courant");
        }
        if (tabJoueur == null) {
            throw new IllegalArgumentException("aucun joueur present");
        }
        this.plateau = plateau1;
        int i = 1;

        this.joueurs = tabJoueur;
        for (i = 1; i <= 2; i++) {
            if (joueurs[i] == joueurs[i + 1]) {
                throw new IllegalArgumentException("attention les 2 joueurs sont de meme couleur");
            }
        }
        joueurCourant = joueurEnCour;
        joueurGagnant = joueurWinner;
    }

    public Etat() {
        this.plateau = new Pion[10][10];
        this.joueurs = new Joueur[2];
        for (int i = 1; i <= 2; i++) {
            if (joueurs[i] == joueurs[i + 1]) {
                throw new IllegalArgumentException("attention les 2 joueurs sont de meme couleur");
            }
        }

        joueurCourant = new Joueur(BLANC);
        joueurGagnant = null;
    }

    public Pion[][] getPlateau() {
        return plateau;
    }

    public Joueur[] getJoueurs() {
        return joueurs;
    }

    public Joueur getJoueurCourant() {
        return joueurCourant;
    }

    public Joueur getJoueurGagnant() {
        return joueurGagnant;
    }

    public boolean estFin() {
        if (this.joueurGagnant != null) {
            return true;
        } else {
            return false;
        }
    }

    public void setJoueurCourant(Joueur unJoueur) {
        if (unJoueur == null) {
            throw new IllegalArgumentException("joueur null");
        }
        joueurCourant = unJoueur;
    }

    public void setPion(Pion pion, Position position) {
        if (pion == null) {
            throw new IllegalArgumentException("pion invalide");
        }
        if (position == null) {
            throw new IllegalArgumentException("position invalide");
        }
        this.plateau[position.getLigne()][position.getColonne()] = pion;
    }

    public Pion getPion(Position position) {
        if (position == null) {
            throw new IllegalArgumentException("pas de pion a la position donnée");
        }
        return this.plateau[position.getLigne()][position.getColonne()];
    }

    public void setJoueurGagnant(Joueur joueur) {
        if (joueur == null) {
            throw new IllegalArgumentException("le jeu est toujours en cours!");
        } else {
            this.joueurGagnant = joueur;
        }
    }

    public void changeJoueurCourant() {

    }

    public boolean finPiece(Couleur couleur) {
        boolean ok = true;
        Pion[][] plateau1 = new Pion[10][10];
        plateau1 = this.plateau;
        Pion pionInter = new Pion(couleur);
        for (int i = 0; i <= plateau1.length; i++) {
            for (int j = 0; i <= plateau.length; i++) {
                if (plateau[i][j] == pionInter) {
                    ok = false;
                }
            }
        }
        return ok;
    }

}
Couleur :
Code:
package dames;

public enum Couleur {BLANC,NOIR}

aidez moi je vais devenir dingue a tourner en rond depuis 2h de l'aprem sur ce problème et je n'ai plus labo java cette semaine ...
cyclops

merci,
martin

trikman

Nombre de messages : 68
Prénom : martin
Date d'inscription : 04/11/2009

Revenir en haut Aller en bas

Re: [LAJ] projet classe Etat - probleme constructeur

Message  aro le Mer 24 Mar 2010, 20:49

trikman a écrit:
aidez moi je vais devenir dingue a tourner en rond depuis 2h de l'aprem sur ce problème et je n'ai plus labo java cette semaine ...
cyclops
Juste le plus urgent :
- Tu n’as toujours pas un bon constructeur, depuis quand un constructeur retourne void ?
- Tu n’as toujours pas bien déclaré tes constantes (mais ce n’est pas ça qui te bloque).
- Et ta méthode equals retourne false quoi qu’il arrive.
Arrange déjà ça et attends demain pour la suite
Arrow

aro

Nombre de messages : 557
Prénom : Anne
Statut : Prof
Date d'inscription : 06/09/2008

Revenir en haut Aller en bas

Re: [LAJ] projet classe Etat - probleme constructeur

Message  trikman le Mer 24 Mar 2010, 21:26

pour le constructeur,

il est mit dans le diagramme UML
public void Joueur(Couleur couleur)
j'en ai conclu que c'etait le constructeur car je pensais que on ne pouvais pas nommer une méthode du même nom que la classe

mon erreur venait de la ... mais alors comment se fait-il que dans le diagramme UML le constructeur ne soit pas représenté?

trikman

Nombre de messages : 68
Prénom : martin
Date d'inscription : 04/11/2009

Revenir en haut Aller en bas

Re: [LAJ] projet classe Etat - probleme constructeur

Message  Anthoblack le Mer 24 Mar 2010, 22:44

trikman a écrit:pour le constructeur,

il est mit dans le diagramme UML
public void Joueur(Couleur couleur)
j'en ai conclu que c'etait le constructeur car je pensais que on ne pouvais pas nommer une méthode du même nom que la classe

mon erreur venait de la ... mais alors comment se fait-il que dans le diagramme UML le constructeur ne soit pas représenté?
Je ne connais pas ton diagramme UML mais j'imagine que c'est bien un constructeur avec couleur comme paramètre... et donc sans ce fameux "void"..

Anthoblack

Nombre de messages : 764
Age : 28
Prénom : Anthony
Statut : Ex-étudiant
Localisation : Bruxelles
Date d'inscription : 11/03/2008

Revenir en haut Aller en bas

Re: [LAJ] projet classe Etat - probleme constructeur

Message  pbt le Mer 24 Mar 2010, 23:27

Exact, il y a un "void" qui traîne dans le diagramme UML qui ne devrait pas y être ... ton esprit critique est bon ... ôte ce "void".

_________________
smartq.namok.be · faq ·  · IRC / irc.freenode.net #esi · blog.namok.be
style #pbt {heigth:189cm; weight:79kg; eye-color:#524000; hair:very short; dead pixels: some; }

pbt
Admin

Nombre de messages : 4862
Age : 45
Prénom : Pierre
Statut : prof
Localisation : La cité des géants
Date d'inscription : 24/11/2005

http://esi.namok.be

Revenir en haut Aller en bas

Re: [LAJ] projet classe Etat - probleme constructeur

Message  aro le Jeu 25 Mar 2010, 09:08

trikman a écrit:pour le constructeur,

il est mit dans le diagramme UML
public void Joueur(Couleur couleur)
j'en ai conclu que c'etait le constructeur car je pensais que on ne pouvais pas nommer une méthode du même nom que la classe

mon erreur venait de la ... mais alors comment se fait-il que dans le diagramme UML le constructeur ne soit pas représenté?
Je ne connaissais pas non plus ton diagramme UML et je me demandais bien pourquoi tu t’obstinais pour Joueur alors que c’était bien pour Etat. Surprised
Et, Java permet (ce qui ne veut pas dire qu’il faut le faire !) une méthode (ou même un attribut) qui a le même nom que la classe puisque, le contexte étant différent, il n’y a pas d’ambiguïté.

Revenons à ta méthode equals (que tu devrais utiliser à la place de ==, qui compare les références et pas les valeurs de 2 joueurs) : même en mettant true pour le deuxième return, ce ne serait pas correct. Essaie plutôt de trouver le bon test sans utiliser de "!" car comme cela deux joueurs vont être trop vite considérés égaux.

Sinon, dans le constructeur avec paramètres Etat :
- Tu ne vérifies pas que les éléments du tableau de joueurs ne sont pas null
- J’imagine qu’il faudrait juste vérifier qu’il y a 2 joueurs et qu’ils ne sont pas de la même couleur. Ce n’est pas du tout ce que tu fais : tu vas chercher les éléments d’indice 1,2 et 3
Il y aussi encore du travail de correction pour le constructeur sans paramètres : tel quel, tous les éléments des tableaux sont null. Difficile de jouer sans pions et sans joueurs. Very Happy

Et, à propos de changeJoueurCourant, il ne faut pas de joueur en paramètre puisqu’il n’y a que deux joueurs : si le joueur courant est l’un alors la méthode change le joueur courant comme étant l’autre

aro

Nombre de messages : 557
Prénom : Anne
Statut : Prof
Date d'inscription : 06/09/2008

Revenir en haut Aller en bas

Re: [LAJ] projet classe Etat - probleme constructeur

Message  Contenu sponsorisé Aujourd'hui à 08:46


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum