我知道每当有人在这里进行作业时,每个人都会对此表示怀疑,但我已经没有选择余地,可以使用一些指导了。我有一个项目,我必须创建一副纸牌并允许用户选择手的大小,然后用随机的纸牌填充该手并将其显示给用户。我已经找到许多使用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
令人担忧,因为某些外部类可能会对
handIn
的hand
进行更改,并且该更改也将由该实例反映出来(因为它们指向同一数组)。“复制”构造函数应在对数据进行“复制”。实际上,这可能应该是“深层”副本,因此对
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