2012-10-30 49 views
0
陣列

說我有一個播放器類,如:創建陣列中的Java

public class Player { 

String name; 
int chips; 
int betVal; 

} 

是下面的代碼正確創建的玩家陣列?

public static void main(String[] args) { 
    int playerCount; 
    int startingChip; 
    out.print("How many players? "); 
    playerCount = myScanner.nextInt(); 
    Player[] aPlayer = new Player[playerCount + 1]; 

    for (int i = 0; i < playerCount + 1; i++){ 
     aPlayer[i] = new Player(); 
    } 

    out.print("Enter starting chip amount: "); 
    startingChip = myScanner.nextInt(); 

} 

如果是這樣,我將如何爲每個玩家分配名稱,籌碼金額和betVal?我將如何在代碼中訪問並更改它們?

編輯:它會更容易離開播放器作爲一個對象或用於訪問它以後的陣列(名稱,芯片,betVal)?

+1

你正在創建一個太多的球員。 – assylias

+0

是的。儘管你可以改寫'for(int i = 0; i nullpotent

+1

這與數組數組有什麼關係?你只有一個簡單的'Player'對象數組,而不是一個數組數組。 – Jesper

回答

1

,你可以告訴你要訪問的一個數組訪問每一個玩家。

`aPlayer[0].name = "JAG";` 

會起作用。

1

爲什麼不問所有的人創造任何東西之前用戶輸入?例如:

public static void main(String[] args) { 
    int playerCount; 
    int startingChip; 

    out.print("How many players? "); 
    playerCount = myScanner.nextInt(); 
    out.print("Enter starting chip amount: "); 
    startingChip = myScanner.nextInt(); 

    Player[] aPlayer = new Player[playerCount]; 

    for (int i = 0; i < playerCount; i++){ 
     aPlayer[i] = new Player(); 
     aPlayer[i].setChips(startingChip); 
    } 
} 

您還應該使用列表。最後,如果你要問每個球員的名字,直接做在循環:

for (int i = 0; i < playerCount; i++){ 
    aPlayer[i] = new Player(); 
    aPlayer[i].setChips(startingChip); 

    out.print("What's the player " + i + " name? "); 
    aPlayer[i].setName(myScanner.next()); 
} 
+0

這個問題我沒有清楚我編輯了我的代碼。當我複製/粘貼時,我忘了將「nextInt」更改爲「next」。 – Malexandre

2

首先,你的變量需要是私有的(還有誰喜歡公共變量,但程序員的部分最更喜歡私人)。

您既可以通過重載的構造函數或通過設置setter方法Player對象的值。

public class Player { 


    private String name; 
    private int chips; 
    private int betVal; 


    public Player(){ 
    //default constructor to initialize without any parameters 
    } 

    public Player(String name, int chips, int betVal){ 
     this.name=name; 
     this.chips=chips; 
     this.betVal=betVal; 

    } 


    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public int getChips() { 
     return chips; 
    } 

    public void setChips(int chips) { 
     this.chips = chips; 
    } 

    public int getBetVal() { 
     return betVal; 
    } 

    public void setBetVal(int betVal) { 
     this.betVal = betVal; 
    } 
} 

在這種情況下,你的初始化可能是要麼

aPlayer[i] = new Player("Jason", 5,1000); 

或使用制定者在

for (int i = 0; i < playerCount + 1; i++){ 
     aPlayer[i] = new Player(); 
} 


aPlayer[i].setName("Jason"); 
aPlayer[i].setChips(5); 
aPlayer[i].setBetVal(1000); 

考慮您的示例程序,我想選擇2次很好。

0

嘗試這樣的事情...... 要求在循環本身球員個人信息。

System.out.println("How many players? "); 
    Scanner myScanner = new Scanner(System.in);; 
    playerCount = myScanner.nextInt(); 
    Player[] aPlayer = new Player[playerCount]; 

    for (int i = 0; i < playerCount; i++){ 
     aPlayer[i] = new Player(); 

     System.out.println("Enter Name for Player " + i+1); 
     String name = myScanner.next(); 

     System.out.println("Enter chips for Player " + i+1); 
     int chips = myScanner.nextInt(); 

     System.out.println("Enter betVal for Player " + i+1); 
     int betVal = myScanner.nextInt(); 

     aPlayer[i].name = name; 
     aPlayer[i].chips = chips; 
     aPlayer[i].betVal = betVal; 
    } 

還使Player類的實例變量爲private,並使用getters和setter訪問它們。