当我说“addCardToHand”时,我如何添加一张卡片?我尝试card++;
和hand++;
都没有效果。我的代码有问题,还是我刚刚遗漏了一些东西?我觉得我需要添加一些东西,但我不知道是什么。
private AbstractCard[] hand;
private int winCount;
public AbstractPlayer() {
hand = new AbstractCard[0];
}
public AbstractPlayer(int score) {
}
public void addCardToHand( AbstractCard card ) {
AbstractCard[] NewHand = new AbstractCard[hand.length+1];
for ( int i = 0; i < NewHand.length; i++) {
NewHand[i] = hand[i];
}
}
public void resetHand() {
hand = new AbstractCard[0];
}
答案 0 :(得分:0)
我认为可能是因为hand[]
中没有任何内容。它被创建为一个大小为0的数组(没有元素),然后当你添加一张卡时,你从索引0的hand[]
拉出来,但由于hand[]
没有元素,所以&# 39;不要从任何地方拉。
基本上,代码中没有任何地方hand[]
变成一个包含其中任何元素的数组,所以当你从hand[0]
取出时,那里什么都没有,因为在{{1 },hand = new AbstractCard[0];
是数组的大小。
编辑: 您可能希望使用ArrayList(Oracle documentation)(Stack Overflow post),因为它们没有预先定义的大小。在您的情况下,您可以随时添加元素,因此ArrayList非常有用。使用ArrayList,您不必经常创建新阵列。
答案 1 :(得分:-1)
您可能希望跟踪卡片的下一个插入位置,其状态为private int insertCursor = 0;
您的addCardToHand(AbstractCard)
方法可以简单地
public void addCardToHand(AbstractCard card) {
hand[insertCursor++] = card;
}