2016-07-30 17 views
0

私の問題は私の教授は私たちに、このメソッドを書く方法についての非常に詳細な指示を出した:カードの手を対処 - 互換性のないタイプのエラーを

「dealAHand方法は、従来の方法を使用して(一枚のカードを扱ってループを持っています - ハンドヘルドカードオブジェクトを含む文字列を除いて、toStringの結果と同様に、Hand内のCardオブジェクトのリストを返す。

I彼が言ったことをやろうとしていますが、互換性のないタイプエラーが続いています。この化身では、crdはカード[]に変換できません。さらに、これは変数handSizeが言及されている唯一の時間です。

必要に応じてドライバを投稿することもできます。何か案は?それらをイントロレベルにしておいてください。

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

正確にこのエラーが発生していますか? – Mureinik

+0

dealHandでcrdがnullです。 –

+0

エラーは返されますcrd; – Tonantzin

答えて

0

サイズがcrdの配列を初期化する必要があります。 Java配列は固定サイズです。 Card[] crd = new Card[handSize];

また、カードの配列を返すdealAHandの戻り値の型を変更する - このように、その大きさを持つように、アレイを構築する最初のhandSizeを宣言してください。

+0

それはほとんど働いた。私はもう2つ問題があります。それはカードではなくメモリの場所を表示していて、命令を誤読しました。文字列を返す必要があります。私はそれを反映するために上記を変更するつもりですが、私は文字列をcrdと組み合わせるのに問題があります。 – Tonantzin

0

私はそれを最終的に見つけました!返事をいただいた皆様に感謝します。 :-)

public String dealAHand() { 
    int handSize = 5; 

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

「教授がパラメータ化を書いた」という問題がありますが、それを特徴づけました。値%4と値%13は正しくありません。私が物事を注文する場合を考えてみましょう。

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

この場合、13で除算すると、私たちにどのようなスーツ(S、H、D、C)があるかがわかりますが、MODULO 13はランクを教えてくれます。あるいは、次のように整理すると:

AS AH AD AC 2S 2HD 2C。 。 。 QS QH QD QC KS KH KD K

次にDIVIDE BY FOURはランクを与え、MODULOはスーツを与える。

値%4と値%13は単純に間違っています。それ自体はQUAD FADAMENTALエラーです。これは決して働くことはできません。

関連する問題