我知道每当有人在这里进行作业时,每个人都会对此表示怀疑,但我已经没有选择余地,可以使用一些指导了。我有一个项目,我必须创建一副纸牌并允许用户选择手的大小,然后用随机的纸牌填充该手并将其显示给用户。我已经找到许多使用ArrayLists的答案,但是我需要一个数组,并且我已经尝试了所有已知的知识,并且我的代码完全错误或者抛出了很多错误。
所以这是我遇到的问题:

1)Hand类中的addCard方法可用于一次将一个Card对象添加到hand数组中,直到充满为止。每次将Card对象添加到Hand时,只要有足够的空间可容纳到Hand中,它就应该增加cardsInHand计数器。

这是Hand类的代码:

public class Hand
{

   private int handSize;         //Holds the size of the hand
   private int cardsInHand;      //Holds the number of cards allowed in the hand
   private Card[] hand;          //Array of card objects

   public Hand()
   {
      this.handSize = 5;
      this.cardsInHand = 0;
      this.hand = new Card[52];
   }//end Default Constructor

   public Hand(int handSize)
   {
      this.handSize = handSize;
   }//end Parameterized Constructor

   public Hand(Hand handIn)
   {
      this.handSize = handIn.handSize;
      this.cardsInHand = handIn.cardsInHand;
      this.hand = handIn.hand;
   }//end Copy Constructor

   public void addCard(Card card)
   {
      hand[card]; //--> throws a type mismatch exception (change card param to an int)

   }//end addCard()

   public int getHandSize()
   {
      return handSize;
   }

   public void setHandSize(int handSize)
   {
      this.handSize = handSize;
   }

   public int getCardsInHand()
   {
      return cardsInHand;
   }

   public void setCardsInHand(int cardsInHand)
   {
      this.cardsInHand = cardsInHand;
   }

   public Card[] getHand()
   {
      return hand;
   }

   public void setHand(Card[] hand)
   {
      this.hand = hand;
   }

   public String toString()
   {
      String msg = "";

      return msg;
   }//end toString()

}//end class


我的addCard方法非常简陋,我真的可以使用一些帮助来尝试填充它,以便我的程序能够正常工作。任何帮助,甚至指向正确的方向将不胜感激!

最佳答案

我的addCard方法非常简陋,我真的可以使用一些帮助来尝试填充它,以便我的程序能够正常工作。任何帮助,甚至指向正确的方向,将不胜感激


有时最好的办法是停下来,关闭屏幕,拿笔和纸,然后把它拧紧,不用任何代码。尝试理解问题并弄清楚逻辑。

基本上,您有一系列可以在其中放入Card的存储桶。在将Card放入存储桶之前,您需要知道是否有可用的免费存储桶。

如果存在,则需要将Card添加到下一个可用存储桶(应由cardsInHand指向)并递增cardsInHand

您的错误是因为您尝试使用Card引用“存储桶”,但是只能通过索引(数字)引用“存储桶”,因此...

hand[card];


应该更像...

hand[cardsInHand] = card;


但只有在确定是否有可用的“存储桶”之后,并且在此语句之后您应该增加cardsInHand

我也会担心你的建设者

public Hand(int handSize)
{
   this.handSize = handSize;
}//end Parameterized Constructor


没有初始化hand,所以将是null。更好的解决方案是在可能的情况下使用现有的构造函数来构建通用的“初始化”路径

public Hand() {
    this(5);
}//end Default Constructor

public Hand(int handSize) {
    this.handSize = handSize;
    this.cardsInHand = cardsInHand;
    this.hand = new Card[handSize];
}//end Parameterized Constructor




public Hand(Hand handIn)
{
   this.handSize = handIn.handSize;
   this.cardsInHand = handIn.cardsInHand;
   this.hand = handIn.hand;
}//end Copy Constructor


令人担忧,因为某些外部类可能会对handInhand进行更改,并且该更改也将由该实例反映出来(因为它们指向同一数组)。

“复制”构造函数应在对数据进行“复制”。实际上,这可能应该是“深层”副本,因此对Card的任何更改也不会与Hand混淆,但是我将从一个简单的“浅层”副本开始,以帮助您入门

public Hand(Hand handIn) {
    this.handSize = handIn.handSize;
    this.cardsInHand = 0;
    this.hand = new Card[this.handSize];
    // Yes, I know there is a better way to do this, but
    // I want the OP to learn something
    for (int index = 0; index < handIn.hand.length; index++) {
        Card card = handIn.hand[index];
        if (card != null) {
            hand[cardsInHand] = card;
            cardsInHand++;
        }
    }
}//end Copy Constructor

10-06 06:42