我创建了一个牌组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
}
答案 0 :(得分:3)
你有三个循环,你的内部循环遍历整个范围 - 并为其分配一张不依赖于索引的卡片:< / p>
for (int i = 0; i < theDeck.length; i++)
{
theDeck[i] = new Card(s,v);
}
因此,对于s
和v
的每个值,您都会使用相同的卡覆盖整个套牌。你创造的最终牌是黑桃王,因此问题。
我怀疑你根本不想要那个内循环 - 而是根据s
和v
计算出要使用的索引:
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);
}
}
}