0

所以我有一个 Hand 对象,它是 Card 对象的数组。这是我的 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 函数,但我不知道如何访问,比如手中的第二张牌,因为它不会让我做 hand[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来测试 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;
}

现在可以安全地使用 Card 类型,同时比较它的两个实例并在 List、Set 等集合中使用...

In Hand 类在给定索引处具有卡片的访问器方法。

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