2013-02-15 68 views
2

我有以下代碼:爲什麼這個對象數組中的每個元素都被最後一個對象覆蓋?

public static void main(String[] args) { 
    Player players[] = new Player[2]; 
    Scanner kb = new Scanner(System.in); 
    System.out.println("Enter Player 1's name"); 
    players[0] = new Player(kb.nextLine()); 
    System.out.println("Enter Player 2's name"); 
    players[1] = new Player(kb.nextLine()); 
    System.out.println("Welcome "+ players[0].getName() + " and " + players[1].getName());  
} 

它的目的是創建一個新的播放器對象並存儲球員的名字,同時保持陣列中的所有對象。

這裏是玩家等級:

public class Player { 
    static String name; 
    public Player(String playerName) { 
    name = playerName; 
    } 

    public String getName(){ 
    return name; 
    } 
} 

實際發生的是,當我剛剛有1個對象時,它的工作原理,但是當我有2個,陣列中的每個元素都是一樣的第二位。當我在數組中有3個對象時,每個元素與第三個元素相同,等等。

我不知道爲什麼會發生這種情況,或者如何糾正它,並且它讓我困惑了幾個小時:/

+8

猜猜靜態是什麼意思? – 2013-02-15 18:17:51

+2

@JanDvorak啊很好的接觸,我正盯着這個,並且即將評論,代碼看起來很好。 – thatidiotguy 2013-02-15 18:18:28

+2

http://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html – BalusC 2013-02-15 18:18:36

回答

9

它是因爲靜態字段。靜態在各個對象實例中使用。它們存儲在課堂級別。

下面的代碼將工作:

class Player 
{ 
    String name; 

    public Player(String playerName) 
    { 
     name = playerName; 
    } 

    public String getName() 
    { 
     return name; 
    } 
} 
+1

也許OP意味着使用私有而不是靜態? – Hayden 2013-02-15 18:20:35

+0

謝謝!它修復了:) – user2076554 2013-02-15 18:22:07

3

名稱字段不應該是一成不變的。靜態意味着變量實際上是全局的,並且在所有類實例中共享。

4

更改靜態字符串名稱私人字符串名稱