我一直在查看代码,但我找不到任何看似不合适的东西。我是编程的新手,所以也许我错过了一些明显的东西,但任何帮助都会受到赞赏。我正在进行的任务是创建一个52卡片组然后设计方法来更改卡片组,卡片正在创建但未添加到ArrayList中。我的甲板类代码是:
import java.util.*;
public class FiftyTwoCardDeck
{
List<Card> totalDeck = new ArrayList<>();
private int deckSize = totalDeck.size();
public FiftyTwoCardDeck()
{
for(int j=0;j<4;j++) {
for(int k=0;k<13;k++) {
String s;
String c;
switch(j) {
case 0:
s = "Spades";
break;
case 1:
s = "Diamonds";
break;
case 2:
s = "Clubs";
break;
case 3:
s = "Hearts";
break;
}
switch(k) {
case 0:
c = "Ace";
break;
case 10:
c = "Jack";
break;
case 11:
c = "Queen";
break;
case 12:
c = "King";
break;
default:
c = ""+(k+1);
break;
}
Card card = new Card(s, c);
totalDeck.add(card);
}
}
}
public int cardAmount()
{
return deckSize;
}
}
测试者类只创建一个对象:
public class FiftyTwoCardDeckTester
{
public static void main(String args[])
{
FiftyTwoCardDeck deck = new FiftyTwoCardDeck();
}
}
为牌组制作对象的牌组是:
import java.util.*;
public class Card
{
public Card(String st, String ct)
{
suit = st;
count = ct;
}
public String getSuit()
{
return suit;
}
public String getCount()
{
return count;
}
public String suit;
public String count;
}
答案 0 :(得分:2)
private int deckSize = totalDeck.size();
public int cardAmount()
{
return deckSize;
}
您在创建deckSize
对象时初始化FiftyTwoCardDeck
。它在构造函数运行之前设置为0并且从不更新。当卡片被添加到卡组中时,您需要更新它。
或者,删除变量并让cardAmount()
询问列表每次调用它的大小。
public int cardAmount()
{
return totalDeck.size();
}
答案 1 :(得分:0)
这就是问题所在。
private int deckSize = totalDeck.size();
在执行构造函数体之前初始化此字段。请参阅此答案以获取解释:https://stackoverflow.com/a/14806340/342852
答案 2 :(得分:0)
实际上,List
Cards
被cardAmount()
夸大了,但0
将始终返回deckSize
,因为0
在创建时被FiftyTwoCardDeck
提升public int cardAmount()
{
return totalDeck.size()
}
。
请改用:
{{1}}