意外创建了重复的对象? 【JAVA]

时间:2014-06-05 07:29:21

标签: java object duplicates

我想为扑克牌创建一个类,然后将它们放在一个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));
}

1 个答案:

答案 0 :(得分:1)

问题是Card课程中的所有变量都是 static static修饰符表示变量/方法将是类变量/方法。换句话说,它们每个类只存在一次,而不是每个实例。

当您创建第一个Card实例时,您将valuesuit设置为某些值。然后,当您创建第二个实例时,这些值将被覆盖,因为它们每个类只存在一次。

你能做什么?你可以从变量和方法中删除static修饰符。