4

クラス ラボでは、標準のカード デッキを生成し、5 枚をドローするシンプルなカード デッキ ツールを作成します。ArrayList と独自のクラスを作成する方法を学んだばかりですが、今はそれらをまとめようとしていますが、うまくいきません。これが私の基本的なカードクラスです:

public class Card
{
private String Number;
private String Suit;

public Card()
{
Number = "Joker";
Suit = "Card";
}

オーバーロードされたカードクラスもありますが、スペースを節約するために除外しています。次は基本的なデッキ クラスです。

public class Deck
{
private ArrayList<Card> CardDeck = new ArrayList<Card>();

public Deck()
{
CardDeck.clear();
CardDeck.add(new Card("Ace","Hearts"));
}

最後に、クライアント クラスがあります。今、生成されたカード [Ace,Hearts] を印刷しようとしています。

カード クラスには、カードの値を出力するメソッドがあります。

public String print(Deck a) 
{
  return (this.Number+" of "+this.Suit);
}

ただし、リストがクラスの配列リストを印刷する方法に苦労しています。私は今、物事が少しごちゃごちゃしていることを知っています (私はデッキを印刷するつもりはありません) が、このハードルを飛び越えることは、継続してハンド配列リストを作成することよりも重要であると考えました. 問題は同じで、変数の名前が違うだけです。

サイトで同様の質問を探してみましたが、ほとんどは単なる String オブジェクトであるか、arraylist をまったく使用していません。

4

6 に答える 6

3

まず、少し用語を説明ArrayListします。クラスは含まれません。カード オブジェクトのインスタンスへの参照が含まれます。Card 型は ArrayList 宣言で使用され、その ArrayList 内のすべてが Card であることを示しますが、他の場所では Card のclass型が参照されていません。

カードをコンソールに出力したいだけなら、toString便宜上メソッドをオーバーライドすることをお勧めします。現在、試してみると:

System.out.println(aCard);

メモリアドレスを取得します。Card の toString をオーバーライドすると、この出力をカスタマイズできます。例えば:

public String toString() { //In your Card class
    return "["+this.Number+", "+this.Suit+"]";
}

これがどのように機能するかを確認できるように、カードを 1 枚だけ印刷してみてください。

次に、CardDeck の各メンバーを反復処理するには、単純に for each 構文を使用します。

for(Card c : CardDeck)
    System.out.println(c);
于 2013-04-12T06:33:12.370 に答える
1

あなたを繰り返してArrayList CardDeck、各要素のprint()メソッドを呼び出すだけです

for (Card card : CardDeck) {
     card.print();
}
于 2013-04-12T06:37:04.867 に答える
1

Card クラスに print(Deck a) メソッドを含めるべきではありません。Card クラスは、それ自体を印刷する方法のみを知っている必要があります (オブジェクト指向プログラミングでは単一責任の原則と呼ばれます)。

print メソッドがあると仮定します ( toString メソッドをオーバーライドすることも考えてください)

public String print(){
    return (this.Number+" of "+this.Suit);
}

Card インスタンスはそれ自体を認識しているため、パラメーターを使用しないことに注意してください。

さらに、Deck クラスに printCards メソッドを追加します。

public void printCards(){
    for (Card card: CardDeck){
         System.out.println(card.print());
    }
}
于 2013-04-12T06:34:22.160 に答える