1

ブラックジャックゲームを作ろうとしています。デッキを作成したので、それを表示したいと思います。

CardStack クラス内で displayStack にアクセスできないため、何か間違っていることはわかっています。また、継承を正しく行っていない気がします。どうすればこれを修正できますか?

これが私のコードです:

public class CreateCardDeck {
    int deckSize = 52;
    CardStack cardStack = new CardStack(deckSize);

    public void CreateDeck() {
        String[] suit = {"clubs", "diamonds", "hearts", "spades"};
        int[] rank = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};

        for (int i = 0; i < rank.length; i ++) {
            for (int j = 0; j < suit.length; j++) {
                cardStack.push(suit[j], rank[i]);
            }
        }
    }
}

カードクラス:

class Card {
    String suit;
    int rank;

    Card(String suit, int rank) {
        this.suit = suit;
        this.rank = rank;
    }

    public String getSuit() {
        return suit;
    }

    public String getRank() {
        String nameTheRank;
        if (rank == 1)
            nameTheRank = "Ace";
        else if (rank == 11)
            nameTheRank = "Jack";
        else if (rank == 12)
            nameTheRank = "Queen";
        else if (rank == 13)
            nameTheRank = "King";
        else
            nameTheRank = String.valueOf(rank);
        return nameTheRank;
    }
}

CardStack クラス:

class CardStack {
    public void displayDeck() {
        for (int i = 0; i < stackArray.length; i ++)
            System.out.println(stackArray[i]);
    }
}

メインクラス:

public class MainClass {
    public static void main(String[] args) throws IOException {
        CreateCardDeck c = new CreateCardDeck();
        c.CreateDeck();
        // How to display my deck?
    }
}
4

4 に答える 4

2

最初にあなたのタイプを再設計します。それは実際には型内でCreateCardDeck呼び出される静的メソッドである必要があるように思えます。また、スーツと番号の知識は、実際にはその方法の一部であってはならないように思えます. カードは、Java の列挙型のデモンストレーションとしてよく使用されます。1 つは値 (エースからキング) 用の列挙型で、もう 1 つはスーツ用です。createDeckCardDeckCard

のインスタンスを持つことが本当に意味することを考えてみてください。それは本当に意味がありCreateCardDeckますか? 名詞(型)というよりは動詞(メソッド)のように感じます。

今、あなたはまたは似たようなものを持つことができCardDeckFactoryます-しかし、その場合、デッキがオブジェクトの状態の一部になるとは思いません。メソッドによって返されるだけです。

于 2012-11-14T07:31:20.933 に答える
1

あなたはこれを探していますか?クラスを拡張してその変数CreateCardDeckを参照しますか?cardStack

 class Card extends CreateCardDeck
 {
    public void displayDeck()
    {
        for (int i = 0; i < cardStack.size(); i ++)
            System.out.println(cardStack.get(i));
    }
 }
于 2012-11-14T07:33:17.253 に答える
1

できるだけシンプルにしましょう: カードをプレイするにはカードが必要です。
次に、すべてのカードをストックするためのデッキが必要です。

つまり、デッキとカードの 2 つのクラスを持つことができます。デッキのインスタンスを作成すると、プレイに必要な 52 枚のカードが生成されます。

public class Card{}

public class Deck
{
    int deckSize = 52;
    // Here you certainly need a list or a stack to stock your card
    SomeContainer cardStack;

    public Deck()
    {
        String[] suit = {"clubs", "diamonds", "hearts", "spades"};
        int[] rank = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};

        for (int i = 0; i < rank.length; i ++)
        {
            for (int j = 0; j < suit.length; j++)
            {
                cardStack.push(new Card(suit[j], rank[i]));
            }
        }
    }

    public void Display()
    {
        for (int i = 0; i < cardStack.length; i ++)
            System.out.println(cardStack[i]);
    }
}

public class MainClass 
{
    public static void main(String[] args) throws IOException
    {
        Deck deck = new Deck();
        deck.Display();
    }
}
于 2012-11-14T07:45:46.897 に答える
1

CardStack クラスを表示せず、すべての Card クラスを表示しませんでした

基本的に、その中に showCards() メソッドが必要です。カード自体にも、カードを表す toString を実装すると便利です。次のようなものです。

カードのリストまたは配列があるとします:

public void showCards() {
   for (Card card : cards) {
       System.out.println(card);
   }
}

そしてカードで:

public class Card {

   private String suit;
   private int rank;

   public String toString() {
       return rank + " of " + suit;
   }

   //...the rest of the code   
} 

CreateCardDeck に getter を追加します。

public CardSTack getCardStack() {
    return cardStack; 
}

次に、メインに次を追加します。

c.getCardStack().showCards();
于 2012-11-14T07:47:18.110 に答える