Java扑克牌所有相同的牌

时间:2014-04-07 05:49:08

标签: java

我创建了一个牌组Card[52] theDeck,它似乎只包含黑桃王。我认为构造函数没有任何问题,但我是java的新手,所以我可能错了...... 这是甲板构造函数:

public class Deck {

private Card[] theDeck; 
private int top; 
// add more instance variables if needed

public Deck(){
    theDeck = new Card[52];
    for(int s = 1; s <= 4; s++)
    {
        for (int v = 1; v <= 13; v++)
        {
            for (int i = 0; i < theDeck.length; i++)
            {

                theDeck[i] = new Card(s,v);
            }
        }
    }   
}

它应该创建52个不同的Card对象,但是当我打印它时,每张卡都是Card(4,13) - 黑桃之王。

以下是卡构造函数,以防万一:

public class Card implements Comparable<Card>
{

private int suit; 
private int value; 

public Card(int s, int v)
{ //constructor of an object Card
    suit = s;
    value = v;
    //make a card with suit s and value v
}

2 个答案:

答案 0 :(得分:3)

你有三个循环,你的内部循环遍历整个范围 - 并为其分配一张不依赖于索引的卡片:< / p>

for (int i = 0; i < theDeck.length; i++)
{
    theDeck[i] = new Card(s,v);
}

因此,对于sv的每个值,您都会使用相同的卡覆盖整个套牌。你创造的最终牌是黑桃王,因此问题。

我怀疑你根本不想要那个内循环 - 而是根据sv计算出要使用的索引:

for (int s = 1; s <= 4; s++)
{
    for (int v = 1; v <= 13; v++)
    {
        int index = (s - 1) * 13 + (v - 1);
        theDeck[index] = new Card(s, v);
    }
} 

或者保留一个单独的index变量,只需增加:

int index = 0;
for (int s = 1; s <= 4; s++)
{
    for (int v = 1; v <= 13; v++)
    {
        theDeck[index] = new Card(s, v);
        index++;
    }
} 

答案 1 :(得分:0)

你最后一次循环是不必要的, 试试这个

public Deck(){
    theDeck = new Card[52];
    int i=0;
    for(int s = 1; s <= 4; s++)
    {
        for (int v = 1; v <= 13; v++)
        {
            theDeck[i++] = new Card(s,v);

        }
    }   
}