我试图建立一副牌并打印出每张牌。我有一个单独的卡类和一个持有甲板的类。我尝试使用Card类中的toString()方法打印所有卡片级别和套装。出于某种原因,它只打印13张卡(2-A所有CLUBS),其余为空。这是代码:
Card.java
public class Card
{
private enum Suit {HEARTS, DIAMONDS, SPADES, CLUBS};
private Suit suit;
private String rank;
public Card(String r, int index)
{
rank = r;
setSuit(index);
}
public void setSuit(int index)
{
switch(index)
{
case 0:
suit = suit.HEARTS;
break;
case 1:
suit = suit.DIAMONDS;
break;
case 2:
suit = suit.SPADES;
break;
case 3:
suit = suit.CLUBS;
break;
}
}
public String toString()
{
return (rank + " of " + suit);
}
}
Deck.java
public class Deck
{
private Card [] card = new Card[52];
public Deck()
{
for(int i = 0; i < 13; i++)
{
for(int j = 0; j < 4; j++)
{
if(i < 9)
card[i] = new Card(Integer.toString(2+i), j);
else if(i == 9)
card[i] = new Card("J", j);
else if(i == 10)
card[i] = new Card("Q", j);
else if(i == 11)
card[i] = new Card("K", j);
else
card[i] = new Card("A", j);
}
}
}
public Card getInfo(int index)
{
return card[index];
}
}
Test.java
public class Test
{
public static void main(String [] args)
{
Deck deck = new Deck();
for(int i = 0; i < 52; i++)
System.out.println(deck.getInfo(i));
}
}
任何帮助将不胜感激!
编辑:我不能使用你在这里看不到的任何东西。答案 0 :(得分:1)
在你的Deck构造函数中,你永远不会为索引大于12分配卡(因为我永远不会超过12)
您应该使用card[i]
card[(i+1)*j]
其他选项是使用另一个变量(比如index
)来跟踪卡数。
public Deck()
{
int index = 0;
for(int i = 0; i < 13; i++)
{
for(int j = 0; j < 4; j++)
{
if(i < 9)
card[index] = new Card(Integer.toString(2+i), j);
else if(i == 9)
card[index] = new Card("J", j);
else if(i == 10)
card[index] = new Card("Q", j);
else if(i == 11)
card[index] = new Card("K", j);
else
card[index] = new Card("A", j);
// Now increment the index
index++;
}
}
}
答案 1 :(得分:1)
Deck()
中有两个循环 - i
循环覆盖面值,j
循环遍历套件。但是,您总是分配给card[i]
,有效地覆盖它四次,每个套件一次。
相反,您应该考虑i
,并将值分配给card[i * 4 + j]
:
public Deck()
{
for(int i = 0; i < 13; i++)
{
for(int j = 0; j < 4; j++)
{
index = (i * 4) + j;
if(i < 9)
card[index] = new Card(Integer.toString(2+i), j);
else if(i == 9)
card[index] = new Card("J", j);
else if(i == 10)
card[index] = new Card("Q", j);
else if(i == 11)
card[index] = new Card("K", j);
else
card[index] = new Card("A", j);
}
}
}
答案 2 :(得分:0)
你只是将你的数组的相同元素设置为4个卡,每次循环你需要我在某个时刻等于51来设置所有卡或使用某种计数器。
答案 3 :(得分:0)
这里的问题是你要覆盖卡[i] 3次。当你循环浏览j时,你会写入同一张牌[i],所以由于俱乐部是最后一个值,所以它们是套牌中唯一的牌(所有其他牌都被覆盖)
答案 4 :(得分:0)
一项建议: 在switch语句中有一个默认大小写
您的错误就是这里,您的卡片索引仅设置为0到12,因此您的所有卡片只会从卡片0到卡片12初始化。
改变这个: 卡[i] = .... 对此: 卡[i + 13 * j] = ....