2014-06-05 46 views
0

我想創建一個撲克牌類,然後把它們放在一個ArrayList中作爲你的手在遊戲過程中。不幸的是,每次我嘗試畫一隻手時,儘管他們的套裝和值都是隨機的,但用普通的toString方法打印時,每張紙牌看起來都完全一樣。這裏有一些重要的代碼,這裏是the pastebin of the whole class file(只有60行)。誰能告訴我這裏發生了什麼?我很抱歉,如果這是一個重複的問題,我徹底搜查。意外創建重複對象? [Java]

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

也許告訴我們實際的輸出是什麼樣子?另外,你的'toString'也很重要。和你實現它的方式,'getValue'方法以及 –

回答

1

的問題是,在Card類所有的變量都staticstatic修飾符表示變量/方法將是類變量/方法。換句話說,它們每個類只存在一次,而不是每個實例。

當您創建第一個Card實例時,您將valuesuit設置爲某些值。然後,當您創建第二個實例時,這些值將被覆蓋,因爲它們每個類只存在一次。

你能做什麼?您可以從變量和方法中刪除static修飾符。

+0

謝謝!似乎已經工作。看來,我完全不理解靜態修飾符。 – lazarchitect