首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Java中初始化对象数组

如何在Java中初始化对象数组
EN

Stack Overflow用户
提问于 2011-05-05 03:46:44
回答 7查看 644.6K关注 0票数 81

我想为BlackJack游戏初始化一个玩家对象数组。我读了很多关于初始化原始对象的各种方法,比如int数组或字符串数组,但我不能把这个概念带到这里(见下文)。我想返回一个初始化的播放器对象数组。要创建的播放器对象的数量是一个整数,我会提示用户输入。我在想,在初始化player对象的一些成员变量时,构造函数可以接受一个整数值,并相应地命名Player。我想我已经很接近了,但仍然很困惑。

代码语言:javascript
复制
static class Player
{
    private String Name;
    private int handValue;
    private boolean BlackJack;
    private TheCard[] Hand;

    public Player(int i)
    {
        if (i == 0)
        {
            this.Name = "Dealer"; 
        }
        else
        {
            this.Name = "Player_" + String.valueOf(i);
        }
        this.handValue = 0;
        this.BlackJack = false;
        this.Hand = new TheCard[2];
    } 
}
private static Player[] InitializePlayers(int PlayerCount)
{ //The line below never completes after applying the suggested change
    Player[PlayerCount] thePlayers;
    for(int i = 0; i < PlayerCount + 1; i++)
    {
        thePlayers[i] = new Player(i);
    }
    return thePlayers;
}

EDIT - UPDATE:这是我在修改后得到的,因为我理解你的建议:

代码语言:javascript
复制
Thread [main] (Suspended)   
    ClassNotFoundException(Throwable).<init>(String, Throwable) line: 217   
    ClassNotFoundException(Exception).<init>(String, Throwable) line: not available 
    ClassNotFoundException.<init>(String) line: not available   
    URLClassLoader$1.run() line: not available  
    AccessController.doPrivileged(PrivilegedExceptionAction<T>, AccessControlContext) line: not available [native method]   
    Launcher$ExtClassLoader(URLClassLoader).findClass(String) line: not available   
    Launcher$ExtClassLoader.findClass(String) line: not available   
    Launcher$ExtClassLoader(ClassLoader).loadClass(String, boolean) line: not available 
    Launcher$AppClassLoader(ClassLoader).loadClass(String, boolean) line: not available 
    Launcher$AppClassLoader.loadClass(String, boolean) line: not available  
    Launcher$AppClassLoader(ClassLoader).loadClass(String) line: not available  
    BlackJackCardGame.InitializePlayers(int) line: 30   
    BlackJackCardGame.main(String[]) line: 249  
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-05-05 03:48:10

这几乎是好的。只要有:

代码语言:javascript
复制
Player[] thePlayers = new Player[playerCount + 1];

让这个循环成为:

代码语言:javascript
复制
for(int i = 0; i < thePlayers.length; i++)

请注意,java约定规定方法和变量的名称应以小写字母开头。

更新:将你的方法放在类体中。

票数 99
EN

Stack Overflow用户

发布于 2011-05-05 03:48:55

而不是

代码语言:javascript
复制
Player[PlayerCount] thePlayers;

你想要的

代码语言:javascript
复制
Player[] thePlayers = new Player[PlayerCount];

代码语言:javascript
复制
for(int i = 0; i < PlayerCount ; i++)
{
    thePlayers[i] = new Player(i);
}
return thePlayers;

应该返回用播放器实例初始化的数组。

编辑:

一定要查看this table on wikipedia上广泛使用的java的命名约定。

票数 23
EN

Stack Overflow用户

发布于 2011-06-15 22:35:01

如果您不确定数组的大小,或者它是否可以更改,您可以这样做来拥有一个静态数组。

代码语言:javascript
复制
ArrayList<Player> thePlayersList = new ArrayList<Player>(); 

thePlayersList.add(new Player(1));
thePlayersList.add(new Player(2));
.
.
//Some code here that changes the number of players e.g

Players[] thePlayers = thePlayersList.toArray();
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5889034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档