使用一个对象数组的对象......?

时间:2013-10-16 03:09:07

标签: java arrays object

所以我有一个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,它就把它视为一个对象而不是一个数组。那么我该怎么把牌拉到手中的不同位置呢?就像我不能做的那样:

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

所以我试着在Hand类中创建一个getCard函数,但我不知道如何访问,比如手中的第二张牌,因为它不会让我做手[2]因为它没有不要把它当成阵列。我现在正在努力奋斗。我该怎么办?

2 个答案:

答案 0 :(得分: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 versus ==

所以你必须在Card中实现/覆盖正确的方法来测试Card的相等性。

答案 1 :(得分:0)

首先你需要在你的Card类中使用equver和hachCode。

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];
    }
}