Java 使用对象数组中的对象。。。?

Java 使用对象数组中的对象。。。?,java,arrays,object,Java,Arrays,Object,所以我有一个手部对象,它是一组卡片对象。这是我的手工构造器: 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); }

所以我有一个手部对象,它是一组卡片对象。这是我的手工构造器:

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类中创建一个getCard函数,但我不知道如何访问,比如说手上的第二张卡,因为它不允许我进行Hand[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中找到大量关于平等性测试的伟大答案


因此,您必须在
Card
中实现/重写适当的方法来测试卡的相等性。

首先,您需要在您的Card类中设置equals和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;
}
现在可以安全地使用卡片类型,同时比较它的两个实例并在集合中使用,如List、Set

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

class Hand{
    // your code.
    public Card getCardAtIndex(int i){
         // check size, null
          return theCardArray[i];
    }
}

Player1
未声明为数组类型。您不能使用
[index]
符号。此外,您当前设置构造函数的方式是,
Card[]Hand=new Card[5]
是一个局部变量,基本上在构造完成后就可以再见了。我喜欢将
System.exit()
作为异常状态处理,但您是否尝试过抛出
异常
?在您的代码段中,Hand是一个类。Hand对象应该有一个名为Hand的字段(错误的命名方案,至少以小写字母“h”开头)。手对象不是数组。但是您在构造函数中将数组声明为局部变量,而不是类中的字段(
Card[]hand;
hand=new Card[7]
)。还添加了一些边缘大小写处理。
class Hand{
    // your code.
    public Card getCardAtIndex(int i){
         // check size, null
          return theCardArray[i];
    }
}