我想为扑克牌创建一个类,然后将它们放在一个ArrayList中,作为游戏中的手牌。不幸的是,每当我尝试画一只手时,每个单独的扑克牌在使用普通的toString方法打印时看起来完全相同,尽管它们的套装和值是随机的。这是重要的代码片段,这里是the pastebin of the whole class file(只有60行)。谁能告诉我这里发生了什么?如果这是一个重复的问题我很抱歉,我彻底搜查了。
private static char value;
private static String suit;
private static char [] values = {'A', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'J', 'Q', 'K'};
private static String [] suits = {"Hearts", "Spades", "Clubs", "Diamonds"};
public Card(){
this.value = values[(int)(Math.random()*values.length)];
this.suit = suits[(int)(Math.random()*suits.length)];
}
ArrayList<Card> hand = new ArrayList<Card>();
Card a = new Card();
Card b = new Card();
hand.add(a);
hand.add(b);
for (int i=0; i<hand.size(); i++) {
System.out.println(hand.get(i));
}
答案 0 :(得分:1)
问题是Card
课程中的所有变量都是 static
。 static
修饰符表示变量/方法将是类变量/方法。换句话说,它们每个类只存在一次,而不是每个实例。
当您创建第一个Card
实例时,您将value
和suit
设置为某些值。然后,当您创建第二个实例时,这些值将被覆盖,因为它们每个类只存在一次。
你能做什么?你可以从变量和方法中删除static
修饰符。