0

我一直被困在这个问题上,但我想我已经意识到我的套牌建造者最终会制作一副完全一样的纸牌,循环中的最后一个价值。

这是我的甲板建造者和手准备者的代码。它包括一个对象 Card,它接受两个整数,这里是 v 和 s。以及要处理的五张牌的 ArrayList。我会很感激一些帮助!

public ArrayList buildDeck(){
    ArrayList<Card> newDeck = new ArrayList<Card>(52);     
    for(int v=0;v<13;v++)
        for(int s=0;s<4;s++) {
            Card nextCard = new Card(v,s);          
            newDeck.add(nextCard);
        }
    return newDeck;
}

public ArrayList fiveDeal() {
    ArrayList<Card> handOfFive = new ArrayList<Card>(0);
    for(int d=0;d<5;d++)
    {
        handOfFive.add(cardDeck.get((gen.nextInt(cardDeck.size()))));
    }
    return handOfFive;
}

这是我的卡片课程

public class Card
{
    public static String value;
    public static String suit;
    public Card()
    {
        value="100";
        suit="Cards";
    }
    public Card(int v, int s)
    {
        if(v==0)
            value="Jack";
        if(v==1)
            value="Ace";
        if(v==11)
            value="Queen";
        if(v==12)
            value="King";
        else
            value = String.valueOf(v);
        if(s==0)
            suit="Clubs";
        if(s==1)
            suit="Spades";
        if(s==2)
            suit="Diamonds";
        else
            suit="Hearts";
    }
    public static String getCard(Object Card)
    {
        return value + " of " + suit;
    }
}
4

2 回答 2

3

正如 Marko Topolnik 所预料的那样,错误出在您的Card课堂上。改变

public static String value;
public static String suit;

public String value;
public String suit;

解决您当前的问题。

static属性属于类本身,而非静态属性属于该类的特定实例。

另外,我会使用private访问修饰符而不是public使用 getter/setter 方法来访问变量(eclipse 可以为您生成方法)。这样它们将被封装,您可以控制它们被访问和修改的方式。

于 2013-04-29T10:47:11.140 回答
0

我建议您自己创建一个Deck类,在调用方法时从卡组中移除卡片。deal

除了已经提出的建议之外,您的问题可能gen.nextInt(cardDeck.size())是总是返回相同的号码。ArrayList但是,您的问题是您正在尝试使用没有移除的卡组建模。

于 2013-04-29T11:15:35.437 回答