2016-07-30 1 views
0

Mon problème est mon professeur nous a donné des instructions très détaillées sur la façon d'écrire cette méthode:Faire face une main de cartes - erreur types incompatibles

« La méthode dealAHand a une boucle qui traite une carte (en utilisant la méthode précédente - dealACard) à la fois jusqu'à ce qu'il ait traité des HandSize Cards La chaîne renvoyée est une liste des objets Card dans la main - similaire au résultat de toString sauf que la String retournée ici contient uniquement des objets handSize Card. J'essaie de faire ce qu'il a dit, mais je continue à obtenir des erreurs de types incompatibles: dans cette incarnation, il est dit que crd ne peut pas être converti en Card []. De plus, c'est la seule fois que la variable handSize est mentionnée.

Je peux également poster mon pilote si nécessaire. Des idées? S'il vous plaît gardez-les intro-niveau.

public class Card { 
    private Face face; 
    private Suit suit; 

    public Card() {//default 
     face = Face.ACE; 
     suit = Suit.HEARTS; 
    } 

    public Card(Card existingCard) {//copy 
     //Card card = new Card(existingCard); 
     face = existingCard.face; 
     suit = existingCard.suit; 
    } 

    public Card(int n) {//professor written paramaterized 
     face = Face.values()[n % 13]; 
     suit = Suit.values()[n % 4]; 
    } 

    public String toString() { 
     String str = ""; 
     str = "the " + face + " of " + suit; 

     return str; 
    } 
} 

import java.util.Random; 

public class Deck { 
    Card[] deck; 
    int nextCard; 

    public Deck() {//default, filling the deck 
     nextCard = 0; 
     deck = new Card[52]; 

     for (int i = 0; i < 52; i++) { 
      deck[i] = new Card(i); 
     } 
    } 

    public Deck(Card[] existingCard) {//copy 
     for (int i = 0; i < 52; i++) { 
      deck[i] = existingCard[i]; 
     } 
    } 

    public void shuffle() { 
     Random rn = new Random(); 
     Card temp; 
     int num; 

     for (int i = 0; i < 52; i++) { 
      num = rn.nextInt(52); 
      temp = deck[i]; 
      deck[i] = deck[num]; 
      deck[num] = temp; 
     } 
     nextCard = 0; 
    } 

    public Card dealACard() { 
     nextCard++; 
     return deck[nextCard - 1]; 
    } 

    public String dealAHand() {//CHANGED 
     int handSize = 5; 
     Card[] crd = new Card[handSize]; 
     String hand = ""; 
     for (int i = 0; i < handSize; i++) { 
      hand += crd[i].dealACard() + "\n"; 

     } 
     return hand; 
    } 

    public String toString() { 
     String str = " "; 

     for (int i = 0; i < 52; i++) { 
      str += deck[i].toString() + "\n"; 
     } 
     return str; 
    } 
} 
+0

Où exactement obtenez-vous cette erreur? – Mureinik

+0

crd est null dans dealAHand. –

+0

L'erreur est sur retour crd; – Tonantzin

Répondre

0

Vous devez initialiser le tableau crd avec une taille. Les tableaux Java sont de taille fixe. Essayez déclarant handSize première construction alors le tableau d'avoir cette taille, comme celui-ci - Card[] crd = new Card[handSize];

aussi changer le type de retour dealAHand pour retourner le tableau de cartes.

+0

Cela a presque fonctionné. Maintenant, j'ai 2 autres problèmes, cependant. C'est imprimer un emplacement de mémoire plutôt que les cartes et j'ai mal interprété les instructions: il doit renvoyer une chaîne. Je vais changer le dessus pour le refléter, mais j'ai de la difficulté à combiner un String avec crd. – Tonantzin

0

J'ai finalement compris! Merci à tous ceux qui ont répondu. :-)

public String dealAHand() { 
    int handSize = 5; 

    String hand = ""; 
    for (int i = 0; i < handSize; i++) { 
     hand += dealACard() + "\n"; 
    } 
    return hand; 
} 
0

Il y a un PROBLÈME avec votre "paramétrage écrit par le professeur", ou vous l'avez caractérisé. La valeur% 4 et la valeur% 13 NE PEUVENT PAS ETRE CORRECTES. Considérons le cas où je commande les choses ainsi:

AS 2S 3S 4S 5S. . . JS QS KS AH 2H 3H. . . JH QH KH AD 2D 3D. . .

Dans ce cas, diviser par treize nous dit dans quel costume nous sommes (S, H, D, ou C), alors que MODULO treize nous indique le rang. En variante, si nous organisons comme suit:

AS AH AD AC 2S 2H 2D 2C. . . QS QH QD QC KS KH KD KC

puis DIVIDE PAR QUAT donne le rang et MODULO quatre donne le costume.

La valeur% 4 et la valeur% 13 SONT SIMPLEMENT INCORRECTES. C'est en soi une erreur FONDAMENTALE. Cela ne peut JAMAIS fonctionner.