[Java1]TD8 une histoire de Main...

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

[Java1]TD8 une histoire de Main...

Message  Dj x-fuse le Dim 23 Nov 2008, 17:12

Bonjour à tous,

Ne jouant que très peut aux cartes, je me posais une question par rapport à la MainJoueur.

Voici ce que j'ai coder pour : b) Le constructeur crée une main vide, sans carte.

Code:
public MainJoueur(Carte ajout){
      Carte []tab;
      tab = new Carte[3];
      for(int i=0; i<3; i++){
         tab[i]=null;
      }
      tab[0]=carte1;
      tab[1]=carte2;
      tab[2]=carteSupp;
      
      if(tab[0]==null){
         tab[0]=ajout;
      }else{
         if(tab[1]==null){
            tab[1]=ajout;
         }else{
            if(tab[2]==null){
               tab[2]=ajout;
            }else{
               throw new IllegalStateException("Main remplie !");
            }
         }
      }
   }

Est-ce que c'est cohérant comme fonctionnement?

Sachant que je ne sais pas trop comment représenter une Main, je me suis dit qu'un tableau de 3 carte devrait faire l'affaire... Mais vraiment pas sûr !

Par ailleur, je ne sais pas comment visualiser ceci :

d) Écrire la méthode void ajouterCarte() qui ajoute une carte à la main. Cette méthode
envoie une exception IllegalStateException si la main a déjà ses trois cartes.

J'ai commencé avec ceci, mais je suis vraiment dans le brouillard là...
Code:
public void ajouterCarte(){
      Carte carte;
      carte = new Carte();
      MainJoueur main;
      main = new MainJoueur(carte);
   }


Merci d'avance pour votre aide Smile

edit : modif du constructeur

Dj x-fuse

Nombre de messages : 658
Age : 27
Prénom : Jonathan
Statut : 4ième sécu
Localisation : IRL
Date d'inscription : 18/10/2008

Revenir en haut Aller en bas

Re: [Java1]TD8 une histoire de Main...

Message  mcd le Dim 23 Nov 2008, 19:53

C'est pas très clair tout ça.
Le premier exemple que tu donnes semble répondre aux 2 questions en même temps puisqu'il initialise une main vide puis y ajoute une carte !?

mcd

Nombre de messages : 1548
Prénom : Marco
Statut : prof
Localisation : Molenbeek
Date d'inscription : 29/09/2006

http://mcd.namok.be

Revenir en haut Aller en bas

Re: [Java1]TD8 une histoire de Main...

Message  Dj x-fuse le Dim 23 Nov 2008, 20:25

Il faudrait donc que dans mon constructeur il n'y ai que l'initialisation de la main ?

Donc quelque chose comme :

Code:
public MainJoueur(){
      Carte []tab;
      tab = new Carte[3];
      for(int i=0; i<3; i++){
         tab[i]=null;
      }
      carte1=tab[0];
      carte2=tab[1];
      carteSupp=tab[2];
      
   }

Mais alors comment récupérer ce tableau pour y faire entrer une carte avec la méthode ajouterCarte() ?

Dj x-fuse

Nombre de messages : 658
Age : 27
Prénom : Jonathan
Statut : 4ième sécu
Localisation : IRL
Date d'inscription : 18/10/2008

Revenir en haut Aller en bas

Re: [Java1]TD8 une histoire de Main...

Message  pbt le Dim 23 Nov 2008, 20:54

Dj x-fuse a écrit:Voici ce que j'ai coder pour : b) Le constructeur crée une main vide, sans carte.
Rapidement quelques remarques même si de manière générale, ton code est très confus.

Code:
public MainJoueur(Carte ajout){
Comme le dit mcd, tu passe une carte au constructeur hors que celui-ci devrait créer une main vide ... donc pas de paramètres.

Code:
      Carte []tab;
      tab = new Carte[3];
      for(int i=0; i<3; i++){
         tab[i]=null;
      }
      tab[0]=carte1;
      tab[1]=carte2;
      tab[2]=carteSupp;
      
      if(tab[0]==null){
         tab[0]=ajout;
      }else{
         if(tab[1]==null){
            tab[1]=ajout;
         }else{
            if(tab[2]==null){
               tab[2]=ajout;
            }else{
               throw new IllegalStateException("Main remplie !");
            }
         }
      }
}
Tu crées une variable locale qui ne contient rien puisque tu initialises tout à null, ensuite tu fais des tests vis-à-vis de ce tableau .. bref, je ne détaille pas, ce tableau ne sert à rien. Initialise directement tes attributs à null (ce qui est inutile puisque c'est leur valeur par défaut).

Pour ce qui est de la méthode ajout, c'est à cet endroit que l'on s'attend à voir des tests sur les valeurs des cartes, la valur de la main ... mais pas dans le constructeur.


Code:
public void ajouterCarte(){
      Carte carte;
      carte = new Carte();
      MainJoueur main;
      main = new MainJoueur(carte);
   }
C'est tout faux, puisque c'est une méthode, elle a accès aux attibuts de la carte. Pas besoin non plus d'avoir une carte comme variable locale. Par contre ce serait bien d'en recevoir une en paramètre ... ensuite il reste à tester si'il y a une place libre dans un des trois attributs.




_________________
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: [Java1]TD8 une histoire de Main...

Message  Wark le Dim 23 Nov 2008, 20:56

Le tableau de carte doit être un attribut de chaque objet carte et non pas un élément d'un constructeur (je n'ai pas l'énoncé..).

Pour moi, une main vide = 3 Carte à null dans cette même main. J'implémenterais un compteur du nombre de carte que contient la Main pour éviter de devoir tester la carte1, la carte2, etc...

Ce tableau devient donc accessible par chaque méthode de la classe.

* Edit * le compteur n'est pas forcément une bonne idée, je ne connais pas du tout le TD. Smile

Wark

Nombre de messages : 682
Age : 29
Prénom : Cédric
Statut : Diplômé 2010
Localisation : Braine l'alleud
Date d'inscription : 04/02/2008

Revenir en haut Aller en bas

Re: [Java1]TD8 une histoire de Main...

Message  Dj x-fuse le Dim 23 Nov 2008, 21:14

PbT a écrit:
Initialise directement tes attributs à null (ce qui est inutile puisque c'est leur valeur par défaut).
Donc pourquoi faire un constructeur si les cartes sont déjà initialisées à null ?

Code:
public class MainJoueur{
   private Carte carte1;
   private Carte carte2;
   private Carte carteSupp;
   
   public MainJoueur(){
      carte1=null;
      carte2=null;
      carteSupp=null;
   }
ou alors
Code:
public class MainJoueur{
   private Carte carte1=null;
   private Carte carte2=null;
   private Carte carteSupp=null;
   
   public MainJoueur(){
   }
Ce qui, dans le second cas, me semble fort inutile...
PbT a écrit:
C'est tout faux, puisque c'est une méthode, elle a accès aux attibuts de la carte. Pas besoin non plus d'avoir une carte comme variable locale. Par contre ce serait bien d'en recevoir une en paramètre ... ensuite il reste à tester si'il y a une place libre dans un des trois attributs.
d) Écrire la méthode void ajouterCarte() qui ajoute une carte à la main. Cette méthode
envoie une exception IllegalStateException si la main a déjà ses trois cartes.

L'énoncé stipule qu'il ne doit pas y avoir de paramètre... Est-ce logique ?

Dj x-fuse

Nombre de messages : 658
Age : 27
Prénom : Jonathan
Statut : 4ième sécu
Localisation : IRL
Date d'inscription : 18/10/2008

Revenir en haut Aller en bas

Re: [Java1]TD8 une histoire de Main...

Message  mcd le Dim 23 Nov 2008, 21:26

Dj x-fuse a écrit:L'énoncé stipule qu'il ne doit pas y avoir de paramètre... Est-ce logique ?
Les cartes sont créées au hasard.
C'est à cette méthode de créer une carte et de l'ajouter.

mcd

Nombre de messages : 1548
Prénom : Marco
Statut : prof
Localisation : Molenbeek
Date d'inscription : 29/09/2006

http://mcd.namok.be

Revenir en haut Aller en bas

Re: [Java1]TD8 une histoire de Main...

Message  Wark le Dim 23 Nov 2008, 21:45

Dj x-fuse a écrit:
Donc pourquoi faire un constructeur si les cartes sont déjà initialisées à null ?

Un constructeur qui ne "fait" rien est plausible, il a au moins le mérite d'affecter une référence mémoire à ta variable de type Main dans ton programme lors de l'appel avec le keyword new.

Wark

Nombre de messages : 682
Age : 29
Prénom : Cédric
Statut : Diplômé 2010
Localisation : Braine l'alleud
Date d'inscription : 04/02/2008

Revenir en haut Aller en bas

Re: [Java1]TD8 une histoire de Main...

Message  pbt le Dim 23 Nov 2008, 23:29

Dj x-fuse a écrit:Ce qui, dans le second cas, me semble fort inutile...
Oui puisque dans ce cas, tu utilises vraiment le constucteur par défaut.

Dj x-fuse a écrit:L'énoncé stipule qu'il ne doit pas y avoir de paramètre... Est-ce logique ?
Oui comme le dit mcd ... qui a probablement relu l'énoncé avant de te répondre ;-)

_________________
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: [Java1]TD8 une histoire de Main...

Message  Dj x-fuse le Lun 24 Nov 2008, 17:52

Tout d'abord, merci pour vos réponses, cela m'a pas mal éclaircit l'esprit.

Seulement, j'ai vraiment l'impression avec ce TD que je ne parle plus du tout français ou alors que j'ai un gros problème de compréhension Smile

f) Écrire la méthode private void choix1As(Carte laCarte) qui demande au joueur la
valeur de l'as passé en paramètre et la met à jour.
g) Écrire la méthode void choixAs() qui met à jour la valeur de la carte avec la valeur
choisie par la méthode choix1As pour son/ses as.

donc pour le f) j'ai ceci :
Code:
private void choix1As(Carte laCarte){
      Scanner clavier = new Scanner(System.in);
      System.out.println("Choix de la valeur de l'As : 1 ou 10 ?");
      int nb;
      nb = clavier.nextInt();
      if(nb==1){
         laCarte.setValeur(1);
      }else{
         if(nb==10){
            laCarte.setValeur(10);
         }else{
            throw new IllegalArgumentException("Vous avez entrer une valeur non autorisée !");
         }
      }
   }
Mais alors, je ne comprends pas vraiment la différence entre les deux énoncés pour ceci :

f) ... qui demande au joueur la valeur de l'as passé en paramètre et la met à jour.
g) Écrire la méthode void choixAs() qui met à jour la valeur de la carte avec la valeur
choisie par la méthode choix1As pour son/ses as.

C'est quoi la différence? C'est une impression ou on me demande dans le g) de mettre à jour ce qui est déjà fait dans le f) Neutral

Dj x-fuse

Nombre de messages : 658
Age : 27
Prénom : Jonathan
Statut : 4ième sécu
Localisation : IRL
Date d'inscription : 18/10/2008

Revenir en haut Aller en bas

Re: [Java1]TD8 une histoire de Main...

Message  Wark le Lun 24 Nov 2008, 18:01

D'après ce que j'ai compris, la première méthode utilise la seconde.

Niveau algo, cela donnerait un truc du genre :

Code:

Methode choix1As(Carte carte)
..
 SI (nb=1 OU nb=10) ALORS
  choixAs(nb)
 SINON
  Exception
 FIN SI
FIN METHODE

Wark

Nombre de messages : 682
Age : 29
Prénom : Cédric
Statut : Diplômé 2010
Localisation : Braine l'alleud
Date d'inscription : 04/02/2008

Revenir en haut Aller en bas

Re: [Java1]TD8 une histoire de Main...

Message  mcd le Lun 24 Nov 2008, 18:48

Euh ! C'est plutôt la 2ème qui utilise la première.
La 2ème a pour rôle de donner une valeur à chaque As de la main.
La 1ère a pour rôle de donner une valeur à UNE carte.

mcd

Nombre de messages : 1548
Prénom : Marco
Statut : prof
Localisation : Molenbeek
Date d'inscription : 29/09/2006

http://mcd.namok.be

Revenir en haut Aller en bas

Re: [Java1]TD8 une histoire de Main...

Message  Wark le Lun 24 Nov 2008, 19:00

mcd a écrit:Euh ! C'est plutôt la 2ème qui utilise la première.
La 2ème a pour rôle de donner une valeur à chaque As de la main.
La 1ère a pour rôle de donner une valeur à UNE carte.

Effectivement, dans ce contexte, le nom des méthodes m'est plus clair. Smile

Wark

Nombre de messages : 682
Age : 29
Prénom : Cédric
Statut : Diplômé 2010
Localisation : Braine l'alleud
Date d'inscription : 04/02/2008

Revenir en haut Aller en bas

Re: [Java1]TD8 une histoire de Main...

Message  Dj x-fuse le Lun 24 Nov 2008, 19:24

mcd a écrit:Euh ! C'est plutôt la 2ème qui utilise la première.
La 2ème a pour rôle de donner une valeur à chaque As de la main.
La 1ère a pour rôle de donner une valeur à UNE carte.

Merci pour la précision, je vais appliquer ça alors !

Dj x-fuse

Nombre de messages : 658
Age : 27
Prénom : Jonathan
Statut : 4ième sécu
Localisation : IRL
Date d'inscription : 18/10/2008

Revenir en haut Aller en bas

Re: [Java1]TD8 une histoire de Main...

Message  Anthoblack le Lun 24 Nov 2008, 22:54

Dj x-fuse a écrit:Seulement, j'ai vraiment l'impression avec ce TD que je ne parle plus du tout français ou alors que j'ai un gros problème de compréhension Smile
Ça va pas aller en s'améliorant silent Mais grâce à ça, on devient vmt indépendants dans nos recherchent d'infos et notre mise en pratique Smile

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: [Java1]TD8 une histoire de Main...

Message  Invité le Sam 29 Nov 2008, 03:33

En fait voilà mon TD8, le joueur est perdant qd il a 20 alors que le croupier a 24, est-ce logique???
Merci.

Invité
Invité


Revenir en haut Aller en bas

Re: [Java1]TD8 une histoire de Main...

Message  LSV le Sam 29 Nov 2008, 14:04

il me semble que si l'on dépasse 21 on ne peux en aucun cas gagner...

LSV

Nombre de messages : 638
Age : 27
Prénom : Jérome
Statut : Diplomé 2013
Localisation : Anderlecht
Date d'inscription : 24/09/2007

Revenir en haut Aller en bas

Re: [Java1]TD8 une histoire de Main...

Message  Invité le Sam 29 Nov 2008, 16:07

Oui mais là, je ne l'ai pas depassé, alors je devais remporter le jeu étant donné queje suis pret de la valeur de 21

Invité
Invité


Revenir en haut Aller en bas

Re: [Java1]TD8 une histoire de Main...

Message  mcd le Sam 29 Nov 2008, 17:48

En effet, il y a une erreur dans ma formule; tu peux modifier le code pour corriger Wink

mcd

Nombre de messages : 1548
Prénom : Marco
Statut : prof
Localisation : Molenbeek
Date d'inscription : 29/09/2006

http://mcd.namok.be

Revenir en haut Aller en bas

Re: [Java1]TD8 une histoire de Main...

Message  LSV le Sam 29 Nov 2008, 19:46

Newu_ a écrit:Oui mais là, je ne l'ai pas depassé, alors je devais remporter le jeu étant donné queje suis pret de la valeur de 21
oué bah mon message voulait dire que le croupier a 24 ne pouvait pas gagner donc que ton code ne marchait pas correctement...

LSV

Nombre de messages : 638
Age : 27
Prénom : Jérome
Statut : Diplomé 2013
Localisation : Anderlecht
Date d'inscription : 24/09/2007

Revenir en haut Aller en bas

Re: [Java1]TD8 une histoire de Main...

Message  Dj x-fuse le Dim 30 Nov 2008, 13:49

Ceci devrait résoudre ton problème :
Code:
if (valeurJoueur > 21 || valeurJoueur <= valeurCroupier || (valeurCroupier>21&&valeurJoueur<=21)) {
       System.out.print ("croupier gagnant : ");
   } else {
       System.out.print ("joueur gagnant : ");
   }

Dj x-fuse

Nombre de messages : 658
Age : 27
Prénom : Jonathan
Statut : 4ième sécu
Localisation : IRL
Date d'inscription : 18/10/2008

Revenir en haut Aller en bas

Re: [Java1]TD8 une histoire de Main...

Message  Trusty le Dim 30 Nov 2008, 14:56

[Java1]TD8 une histoire de Main...

le sage a écrit:Jeux de Main jeux de vilains...

Trusty

Nombre de messages : 866
Age : 29
Prénom : Bastien
Statut : old 2010
Localisation : Ath
Date d'inscription : 30/10/2006

Revenir en haut Aller en bas

Re: [Java1]TD8 une histoire de Main...

Message  Dj x-fuse le Lun 01 Déc 2008, 07:28

Trusty a écrit:[Java1]TD8 une histoire de Main...

le sage a écrit:Jeux de Main jeux de vilains...

Elle était facile celle-là Wink

Dj x-fuse

Nombre de messages : 658
Age : 27
Prénom : Jonathan
Statut : 4ième sécu
Localisation : IRL
Date d'inscription : 18/10/2008

Revenir en haut Aller en bas

Re: [Java1]TD8 une histoire de Main...

Message  Invité le Lun 01 Déc 2008, 11:51

Merci à tous.

Invité
Invité


Revenir en haut Aller en bas

Re: [Java1]TD8 une histoire de Main...

Message  Contenu sponsorisé Aujourd'hui à 20:59


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