2012-10-30 54 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访问它们。