0

したがって、Card オブジェクトの配列である Hand オブジェクトがあります。Hand のコンストラクタは次のとおりです。

public Hand(){
    Card[] Hand = new Card[5];
}

カードのコンストラクタは次のとおりです。

   public Card(int value, char suit){
    if (value < 0 || value > 13)
    {
      System.err.println("Twilight Zone Card");
      System.exit(1);
    }
    this.value = value;

    if (suit == 'c')
      suit = 'C';
    if (suit == 'd')
      suit = 'D';
    if (suit == 'h')
      suit = 'H';
    if (suit == 's')
      suit = 'S';

    if (suit == 'C' || suit == 'D' || suit == 'H' || suit == 'S')
    {
      this.suit = suit;
    }
    else
    { 
      System.err.println("No such suit.");
      System.exit(1);
    } 
 }

私が作成しなければならないゲームは魚釣りなので、特定のカード オブジェクトをハンドから取り出して比較したり印刷したりする必要がある場合があります。メイン クラスでハンドをインスタンス化すると、それはオブジェクトとして扱われ、配列ではありません。では、手札のさまざまな場所でカードを引くにはどうすればよいでしょうか? 私ができないように:

Hand Player1 = new Hand();
Hand Player2 = new Hand();
if (Player1[2] == Player2[2])....

だから私は Hand クラスで getCard 関数を作成しようとしましたが、ハンドの 2 番目のカードなどにアクセスする方法がわかりません。それを配列として。私は今とても苦労しています。私は何をすべきか?

4

2 に答える 2

2
public class Hand {
    Card[] hand;

    public Hand() {
        hand = new Card[5];
    }

    public Card getCard(int index) {
        return hand[index];
    }
}

player1.getCard(2).equals(player2.getCard(2)) // avoid using "==" to test equality unless you know what you are doing.

編集:

Javaでは、「==」はプリミティブ値をテストするために使用できますが、それらが同一のオブジェクトであるかどうかをテストしたくない場合を除き、オブジェクトは使用できません。Javaの等価テストに関する優れた回答がたくさんあります。

Java String.equals と ==

Cardしたがって、カードの同等性をテストするには、適切なメソッドを実装/オーバーライドする必要があります。

于 2013-10-16T03:12:21.773 に答える
0

まず、Card クラスで equals と hach​​Code をオーバーライドする必要があります。

public int hashCode(){
   // its simple but just solve the purpose
   return value + suit;
}

public boolean equals(Object other){
   // Check for null, object type...
   Card otherCard = (Card)  other;
   return this.value==otherCard .value && this.suit==otherCard.suit;
}

2 つのインスタンスを比較し、List、Set などのコレクションで使用する際に Card タイプを安全に使用できるようになりました。

Hand クラスには、特定のインデックスでカードのアクセサ メソッドがあります。

class Hand{
    // your code.
    public Card getCardAtIndex(int i){
         // check size, null
          return theCardArray[i];
    }
}
于 2013-10-16T05:03:29.260 に答える