Chateau de cartes

Tuxmona Messages postés 3 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 5 décembre 2009 - 4 déc. 2009 à 11:31
tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 - 7 déc. 2009 à 10:14
Bonjour,

Je suis étudiant en info par correspondance (donc seul au monde ) et je ne comprend pas un exo que j'ai à faire.
Vous allez voir c'est super marrant.

Je dois créer une classe qu'on appelle Triangle qui me permet d'afficher un château de cartes:
/\
/\/\
/\/\/\
/\/\/\/\ sympa non???


Les directives sont:

- des attributs de type Triangle gauche, droite, dessusGauche ... qui indiquent les 6 triangles qui peuvent toucher un triangle.
- l'attribut de classe base qui mémorise le triangle le plus à gauche posé sur la table
-La méthode void poseSurTable() qui place le triangle sur la table et à côté du triangle le plus à droite posé sur la table. Remarque : s'il n'y avait aucun triangle sur la table, le triangle devient la base.
-La méthode de classe static public void afficheTout() qui permet d'afficher le château de cartes entièrement grâce à la reconnaissance du triangle de base. L'affichage se fera avec les caractères \ et /.

Je ne dois pas ajouter d'autres attributs!!!!

Voilà, déjà ce que j'aimerais pouvoir faire c'est lui faire afficher la première ligne. Pour cela dans le "main", je fais:

public static void main(String[] args) {
Triangle t[] = new Triangle[8];

for (int i=0; i<8; i++)
{
t[i] = new Triangle();

}
t[0].poseSurTable();
t[1].poseSurTable();
t[2].poseSurTable();
t[3].poseSurTable();
Triangle.afficheTout();
}

Mais que dois faire ma methode poseSurTable() ????
J'ai un peu honte de moi de ne pas arriver à faire cela mais j'ai l'impression qui me manque quelques petit truc dans mes connaissances qui me bloque.

Quelqu'un aurait une idée pour me débloquer? Je ne demande que des explication bien entendu (quel intérêt pour moi d'avoir le code tout fait )

Merci

5 réponses

tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 4
4 déc. 2009 à 14:22
Bonjour,
j'imagine que t1.poseSurTable() va mettre à null les triangles en dessous, et se mettre à côté d'un autre triangle t0 s'il y en a un, en disant que t0.droite t1 et t1.gauche t0. Ou l'inverse.
Il manque un objet "table"

thip
0
Tuxmona Messages postés 3 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 5 décembre 2009
4 déc. 2009 à 17:32
Merci de ta réponse!

En fait, je n'ai pas mis toutes les méthodes.
il y a également:
- poseSur(Triangle t)
- retire()

du coup l'objet "table n'est pas necessaire. La première méthode aurait pu s'appeler poseDansRangUn()
0
tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 4
4 déc. 2009 à 17:37
Ok je comprends mieux.

Dans ce cas les fonctions poseSur.. doivent modifier les références aux différents triangles alentour.
La particularité de PoseSurTable est de mettre à null les triangles du dessous.

thip
0
Tuxmona Messages postés 3 Date d'inscription vendredi 10 juin 2005 Statut Membre Dernière intervention 5 décembre 2009
5 déc. 2009 à 14:43
Salut,

Exact, le triangle base qui lui (si j'ai bien compris la notion de static) est commun à toutes les instances doit permettre de positionner tout les autres ?

du coup j'ai pu poser mes 2 premier triangle.
Dis-moi ce que tu en pense!

public class Triangle {

Triangle gauche, droite, dessusGauche, dessusDroite, dessousGauche, dessousDroite;
static Triangle base=null;




void poseSurTable()
{
if (base == null)
{
base = new Triangle();
gauche = null;
droite = null;
dessusGauche = null;
dessusDroite = null;
dessousGauche = null;
dessousDroite = null;
}
else
{
base.droite = new Triangle();

}

}

void poseSur(Triangle t){

}

void retire(){

}

public static void afficheTout()
{

if (base != null)
System.out.print("/\");
if (base.droite != null)
System.out.print("/\");

};


public static void main(String[] args) {
Triangle t[] = new Triangle[8];

for (int i=0; i<8; i++)
{
t[i] = new Triangle();

}
t[0].poseSurTable();
t[1].poseSurTable();

Triangle.afficheTout();

}

}


D'après l'énoncé du pb, "base" mémorise le triangle le plus à gauche posé sur la table. Il n'a donc pas de triangle à sa gauche. Donc comment rajouter un tringle à droite du triangle de droite?



merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
tpoinsot Messages postés 345 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 17 octobre 2014 4
7 déc. 2009 à 10:14
Tu as un triangle en main, et tu appliques PoseSurTable : C'est ton triangle que tu dois poser, pas un autre.
Donc, ta vérification de base == null est bien, mais dedans ça ne va pas.
Si la base est nulle, tu la crées, sinon ton triangle est à droite de la base.

		if (base == null)
{
base = new Triangle();
//gauche = null;
//droite = null;
//dessusGauche = null;
//dessusDroite = null;
//dessousGauche = null;
//dessousDroite = null;
}
//else
//{
base.droite = this;

//}


Tu n'as pas mis de constructeur, c'est là que tu initialise tes attributs.

Dans afficheTout, il manque du code, pour afficher les premiers étages. Sans oublier un newline en fin de ligne.

thip
0
Rejoignez-nous