Java 基于用户输入创建多个对象

Java 基于用户输入创建多个对象,java,Java,我正在尝试根据用户输入实例化多个对象。然而,我无法让它工作。有一个player类,其用户名使用getter和setter方法,但我似乎无法从我的条目中成功实例化该对象。这只是一些示例代码粘贴在我试图做的事情。我不想为此使用数据库,所以我只计划使用数组列表。播放器被封装在for循环中,当for循环退出时,创建的播放器对象将失效。我如何才能做到这一点,并允许输入的名称跨播放器类访问播放器类 代码更新:为Player类中的getName方法返回相同的值 提前谢谢 ArrayList<

我正在尝试根据用户输入实例化多个对象。然而,我无法让它工作。有一个player类,其用户名使用getter和setter方法,但我似乎无法从我的条目中成功实例化该对象。这只是一些示例代码粘贴在我试图做的事情。我不想为此使用数据库,所以我只计划使用数组列表。播放器被封装在for循环中,当for循环退出时,创建的播放器对象将失效。我如何才能做到这一点,并允许输入的名称跨播放器类访问播放器类

代码更新:为Player类中的getName方法返回相同的值

提前谢谢

      ArrayList<Player> players = new ArrayList<Player>();
    int numOfPlayers;

    System.out.println("How many players are in this game?");
    numOfPlayers = input.nextInt();


    for(int i = 0; i < numOfPlayers; i++)
    {
        System.out.print("What is Player " + (i + 1) + " name?");
        String name = input.next();
        Player plr = new Player(); // assuming you have a default constructor
        plr.setName(name);
        players.add(plr);
    }

    for(int i = 0; i < numOfPlayers; i++)
    {
        System.out.println(players.get(i).getName());
    }
首先:

ArrayList<Player> players = new ArrayList<Player>();
arraylistplayers=newarraylist();

然后,在for循环中,您需要声明一个新的Player对象并将该Player添加到列表中。您现在要做的是将字符串名称添加到列表中,该列表不是播放器对象。

您从未“创建”过这些对象。你所做的只是创建了一个数组来保存对玩家的引用,但是没有一个玩家是用“new”关键字创建的,这就是编译器分配必要的内存空间来保存它的信息,比如名称

在我看来,关于如何实现这一点的实际代码并不重要,您可能需要更新自己关于Java对象生命周期、构造函数等的知识。

这应该是可行的

ArrayList<Player> players = new ArrayList<Player>();
int numOfPlayers;

System.out.println("How many players are in this game?");
numOfPlayers = input.nextInt();


for(int i = 0; i < numOfPlayers; i++)
{
    System.out.print("What is Player " + (i + 1) + " name?");
    String name = input.next();
    Player plr = new Player();
    plr.setName(name);
    players.add(plr);
}
arraylistplayers=newarraylist();
国际球员;
System.out.println(“这个游戏有多少玩家?”);
numOfPlayers=input.nextInt();
for(int i=0;i
现在所有玩家对象都可以从
players
列表中访问


Player
类有一个
static
变量
name
-因为静态值不依赖于对象,并且对于类的所有对象都保持相同-您无法使用
getName()
方法为不同的对象获取不同的名称。

Player plr=(Player)players.get(i)您正试图从字符串对象强制转换播放器对象。除非您的Player类对Java的String类有某种类型的抽象,否则您不能隐式地从一个类转换到另一个类。换句话说,你不能说
Player p=(String)s
字符串s=(播放器)p而不提供执行此操作的机制。相反,您需要使用
new
操作符来实例化Player对象

您没有发布播放器对象的构造函数,但是如果它是未定义的或空的构造函数(意味着它不接受任何参数,如
public Player(){}
),您可以使用
new
操作符,如
Player plr=new Player(),实例化该对象。因为您可能希望确保播放机具有名称,因此更好的编码实践是向默认构造函数添加名称参数,如
public player(String name){this.setName(name);}
,这将消除每次创建新对象时手动调用
setName()


我还要指出的一点是,您的ArrayList的名称有误导性,因为它包含“名称”(或“玩家名称”)而不是“玩家”。我认为这可能是你困惑的一部分,因为你似乎希望从中得到一个
播放器
对象,而不是
字符串
。在处理容器时,可以使用它来消除一些模糊性。在您的情况下,声明
ArrayList播放器可能是有益的如果
Player
对象是您打算存储在那里的对象或
ArrayList playerNames如果
字符串
对象是您要存储的对象。

1。不要使用原始类型,2。如果
players
包含字符串,则它不包含
Player
您应该实例化一个Player(假设该对象存在),如
Player=newplayer(arg1,arg2..)moniker=pName
Player
setName
方法中?不应该是
this.name=pName
而且
Player
类中的
name
属性是静态的-导致
Player
类的所有对象的值相同。您完全正确。这已经消除了很多关于在类中使用静态的困惑。为了更清晰,请阅读这里:谢谢你的回答,这非常有帮助。如何使用此arraylist中的元素访问Player类中的getName方法?players.get(I).getName(),其中I是元素的索引谢谢。奇怪的是,它返回了所有值的最后一个输入值。我已经更新了代码,你知道为什么吗?它在哪里返回最后的输入值?我在那里的player类中添加了。它返回player类中的name属性
ArrayList<Player> players = new ArrayList<Player>();
int numOfPlayers;

System.out.println("How many players are in this game?");
numOfPlayers = input.nextInt();


for(int i = 0; i < numOfPlayers; i++)
{
    System.out.print("What is Player " + (i + 1) + " name?");
    String name = input.next();
    Player plr = new Player();
    plr.setName(name);
    players.add(plr);
}