2016-07-30 7 views
0

Mein Problem ist mein Professor hat uns sehr detaillierte Anweisungen, wie diese Methode schreiben:eine Hand von Karten Umgang - inkompatible Typen Fehler

„Die dealAHand Methode hat eine Schleife, die eine Karte (mit der bisherigen Methode behandelt - (dealACard) zu einem Zeitpunkt, an dem handSize-Karten ausgeteilt wurden. Die zurückgegebene Zeichenfolge ist eine Liste der Kartenobjekte in der Hand - ähnlich dem Ergebnis von toString, außer dass der hier zurückgegebene String nur handSize-Kartenobjekte enthält.

I Ich versuche zu tun, was er gesagt hat, aber ich bekomme immer wieder inkompatible Typfehler: In dieser Inkarnation steht, dass crd nicht zu Card [] konvertiert werden kann. Darüber hinaus ist dies das einzige Mal, dass die Variable handSize erwähnt wird.

Ich kann auch meinen Treiber bei Bedarf veröffentlichen. Irgendwelche Ideen? Bitte behalten Sie sie intro-level.

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

Wo genau erhalten Sie diesen Fehler? – Mureinik

+0

crd ist null in dealAHand. –

+0

Der Fehler ist bei Rückgabe CRD; – Tonantzin

Antwort

0

Sie sollten die crd Array mit einer Größe initialisieren. Java-Arrays haben eine feste Größe. Versuchen erklären handSize zuerst, dann das Array erstellt, die Größe zu haben, wie diese - Card[] crd = new Card[handSize];

auch den Rückgabetyp von dealAHand ändern, um die Anordnung von Karten zurückzukehren.

+0

Das hat fast funktioniert. Jetzt habe ich zwei weitere Probleme. Es wird eher ein Speicherort als die Karten gedruckt, und ich habe die Anweisungen falsch gelesen: Es muss eine Zeichenfolge zurückgegeben werden. Ich werde das Obige ändern, um es zu reflektieren, aber ich habe Probleme beim Kombinieren eines Strings mit CRD. – Tonantzin

0

Ich habe es endlich herausgefunden! Danke an alle, die geantwortet haben. :-)

0

Es gibt ein PROBLEM mit Ihrer "Professor geschriebene Parametrisierung", oder wie auch immer Sie es charakterisiert haben. Wert% 4 und Wert% 13 KANN NICHT BEWÄHRT WERDEN. Betrachte den Fall, in dem ich die Dinge so bestelle:

AS 2S 3S 4S 5S. . . JS QS KS AH 2H 3H. . . JH QH KHAD 2D 3D. . . usw.

In diesem Fall sagt DIVIDING um 13, in welcher Farbe wir uns befinden (S, H, D oder C), während MODULO dreizehn den Rang angibt. Alternativ, wenn wir wie folgt organisieren:

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

dann gibt DIVIDE BY FOUR den Rang und MODULO vier gibt den Anzug.

Wert% 4 und Wert% 13 SIND EINFACH FALSCH. Das ist ein GRUNDSTREITIGER Fehler. Dies kann NIEMALS funktionieren.

Verwandte Themen