Java 通过for循环在Arraylist中显示对象的各个元素?
我试图显示我创建的对象的各个元素 这是一个简单的Java程序,允许用户添加和跟踪播放器的详细信息 我只是被难倒了,当涉及到显示细节后,他们已经被添加。下面是我的代码 使用案例2,我可以创建对象并将其输入arraylist没有问题,但是当我尝试打印它时,我想执行以下操作Java 通过for循环在Arraylist中显示对象的各个元素?,java,object,for-loop,arraylist,Java,Object,For Loop,Arraylist,我试图显示我创建的对象的各个元素 这是一个简单的Java程序,允许用户添加和跟踪播放器的详细信息 我只是被难倒了,当涉及到显示细节后,他们已经被添加。下面是我的代码 使用案例2,我可以创建对象并将其输入arraylist没有问题,但是当我尝试打印它时,我想执行以下操作 System.out.println("Player Name" + myPlayersArrayList.PlayerName + "Player Position" + myPlayerArrayList.PlayerPosi
System.out.println("Player Name" + myPlayersArrayList.PlayerName + "Player Position" + myPlayerArrayList.PlayerPosition + "Player Age" + "Player Age");
我知道这是不对的,但我真的不知道该怎么办,如果有人能帮上忙,我将不胜感激。谢谢
System.out.println("Welcome to the Football Player database");
System.out.print(System.getProperty("line.separator"));
UserInput myFirstUserInput = new UserInput();
int selection;
ArrayList<Player> myPlayersArrayList = new ArrayList<Player>();
while (true) {
System.out.println("1. View The Players");
System.out.println("2. Add A Player");
System.out.println("3. Edit A Player");
System.out.println("4. Delete A Player");
System.out.println("5. Exit ") ;
System.out.print(System.getProperty("line.separator"));
selection = myFirstUserInput.getInt("Please select an option");
System.out.print(System.getProperty("line.separator"));
switch(selection){
case 1:
if (myPlayersArrayList.isEmpty())
{
System.out.println("No Players Have Been Entered Yet");
System.out.print(System.getProperty("line.separator"));
break;}
else
{for(int i = 0; i < myPlayersArrayList.size(); i++){
System.out.println(myPlayersArrayList);
}
break;
case 2: {
String playerName,playerPos;
int playerAge;
playerName = (myFirstUserInput.getString("Enter Player name"));
playerPos = (myFirstUserInput.getString("Enter Player Position"));
playerAge = (myFirstUserInput.getInt("Enter Player Age"));
myPlayersArrayList.add(new Player(playerName, playerPos, playerAge)); ;
break;
}
使用案例2,我可以创建对象并将其输入arraylist没有问题,但是当我尝试打印它时,我想执行以下操作
System.out.println("Player Name" + myPlayersArrayList.PlayerName + "Player Position" + myPlayerArrayList.PlayerPosition + "Player Age" + "Player Age");
我知道这是不对的,但我真的不知道该怎么办,如果有人能帮上忙,我将不胜感激。谢谢
System.out.println("Welcome to the Football Player database");
System.out.print(System.getProperty("line.separator"));
UserInput myFirstUserInput = new UserInput();
int selection;
ArrayList<Player> myPlayersArrayList = new ArrayList<Player>();
while (true) {
System.out.println("1. View The Players");
System.out.println("2. Add A Player");
System.out.println("3. Edit A Player");
System.out.println("4. Delete A Player");
System.out.println("5. Exit ") ;
System.out.print(System.getProperty("line.separator"));
selection = myFirstUserInput.getInt("Please select an option");
System.out.print(System.getProperty("line.separator"));
switch(selection){
case 1:
if (myPlayersArrayList.isEmpty())
{
System.out.println("No Players Have Been Entered Yet");
System.out.print(System.getProperty("line.separator"));
break;}
else
{for(int i = 0; i < myPlayersArrayList.size(); i++){
System.out.println(myPlayersArrayList);
}
break;
case 2: {
String playerName,playerPos;
int playerAge;
playerName = (myFirstUserInput.getString("Enter Player name"));
playerPos = (myFirstUserInput.getString("Enter Player Position"));
playerAge = (myFirstUserInput.getInt("Enter Player Age"));
myPlayersArrayList.add(new Player(playerName, playerPos, playerAge)); ;
break;
}
只需重写toString方法即可获得所需的输出您需要使用索引来访问单个元素:-
for(int i = 0; i < myPlayersArrayList.size(); i++){
System.out.println(myPlayersArrayList.get(i));
}
您还可以使用“for each”循环。以下是语法:
for(Class object : collectionOfObjects){
//this will loop through the list for you and
//now you can access each object in the list
//using object.property or object.method()
}
//using your example
for(Player player: myPlayersArrayList){
System.out.println(player); //requires override of toString() method
//or you could use
System.out.println(player.getName());
}
如果只想在添加数据后立即显示数据,可以声明一个播放器引用,并使其指向添加到列表中的对象,如下所示:
Player p = new Player(playerName, playerPos, playerAge);
myPlayersArrayList.add(p);
System.out.println("Player Name" + p.PlayerName + "Player Position" + p.PlayerPosition + "Player Age" + p.playerAge);
然而,在OOP环境中,直接访问对象的属性是非常不受欢迎的,所以您应该通过get方法来检索它们。例如,要获取玩家名称,这就足够了:
public String getPlayerName(){
return playerName;
}
如果以后要打印数据,可能应该查看迭代器模式。列表是元素的集合。该列表提供了许多有用的方法,允许您管理它、添加、删除、设置、索引、包含,最重要的是,在本例中,还可以获取
为了操作列表中的元素,首先需要从列表中获取或检索它
列表是,这意味着您不需要使用索引for循环来访问各个成员,除非索引很重要
所以你可以
for(int i = 0; i < myPlayersArrayList.size(); i++){
Player player = myPlayersArrayList.get(i);
// display results
}
要显示播放器对象的内容,您可以执行许多不同的操作
您可以简单地显示播放器的各种属性,因为我无法访问您的播放器类,所以我猜测它的属性
System.out.println("Player Name: " + player.PlayerName + "; Player Position: " + player.PlayerPosition + "Player Age: " + player.PlayerAge);
或者您可以编写格式化程序方法。这可以是Player类的静态,也可以是utility类的一部分,具体取决于您的需要
System.out.println(PlayerUtils.format(player)); // Format the player properties as you see fit
或者,正如已经建议的那样,您可以覆盖播放器的toString方法
所有这些方法都有优点和缺点
我倾向于将诊断信息放入我的toString方法中,这通常对向用户显示不有用。格式化程序对于其他开发人员来说并不总是显而易见的,除非它们有很好的文档记录
您需要选择对您和您的需求最有用的内容。您也可以在Java 8中使用forEach:
List<String> myPlayersArrayList = new ArrayList<>();
myPlayersArrayList.stream().forEach((player) -> {
System.out.println("Player: " + player); //Override toString() in Player class
});
感谢您的回复,当我在末尾添加[i]时,虽然它说需要数组,但找到了ArrayList。@user1180888啊!你需要用myPlayerList.geti来获取,用myPlayerList.add来添加一些东西……哇,这真是太棒了。但它怎么知道它在使用“toString”方法呢?它看起来不像是指我。谢谢在System.out.println中放入对象名时,将自动调用toString方法。您也可以显式地调用object.toString,但正如您所看到的,这不是必需的。
System.out.println(player);
List<String> myPlayersArrayList = new ArrayList<>();
myPlayersArrayList.stream().forEach((player) -> {
System.out.println("Player: " + player); //Override toString() in Player class
});