我正在尝试显示我创建的对象的各个元素。
这是一个简单的Java程序,允许用户添加和跟踪玩家详细信息。
在添加细节后,我很难过。这是我的代码看起来像
我可以使用案例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;
}
答案 0 :(得分:4)
您需要使用索引来访问单个元素: -
for(int i = 0; i < myPlayersArrayList.size(); i++){
System.out.println(myPlayersArrayList.get(i));
}
然后,您可以覆盖toString()
类
Player
方法
public String toString() {
return playerName + " : " + playerAge + " : " + playerPosition;
}
答案 1 :(得分:2)
我可以使用案例2创建对象并将其输入到arraylist中没有问题,但是当我尝试将其打印出来时我想做类似的事情
System.out.println("Player Name" + myPlayersArrayList.PlayerName + "Player Position" + myPlayerArrayList.PlayerPosition + "Player Age" + "Player Age");
我知道这不正确,但我真的不知道该怎么做,如果有人可以提供任何帮助,我将不胜感激。感谢
只需覆盖toString()
方法即可获得所需的输出
答案 2 :(得分:1)
你也可以使用'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());
}
答案 3 :(得分:1)
List
是元素的集合。 List
提供了许多有用的方法,可让您对其进行管理,add
,remove
,set
,indexOf
,contains
以及大多数重要的是,在这种情况下,get
。
为了操作列表中的元素,首先需要从列表中“获取”或检索它。
List
为Iterable
,这意味着您无需使用索引for
循环来访问各个成员(除非索引很重要)。
所以你可以......
for(int i = 0; i < myPlayersArrayList.size(); i++){
Player player = myPlayersArrayList.get(i);
// display results
}
或
for (Player player : myPlayersArrayList) {
// display results
}
要显示Player
对象的内容,您可以执行许多不同的操作......
您可以简单地显示Player
的各种属性(我无法访问您的Player
类,因此我猜测其属性)
System.out.println("Player Name: " + player.PlayerName + "; Player Position: " + player.PlayerPosition + "Player Age: " + player.PlayerAge);
或者您可以编写“格式化程序”方法。这可能是Player
类的静态,也可能是实用程序类的一部分,具体取决于您的需求
System.out.println(PlayerUtils.format(player)); // Format the player properties as you see fit
或者,正如您已经建议的那样,您可以覆盖toString
Player
方法
System.out.println(player);
所有这些方法都有优点和缺点。
我倾向于将诊断信息放入我的toString
方法中,这对于向用户显示通常并不常用。格式化程序对其他开发人员来说并不总是显而易见的(除非他们有详细记录;)。)。
您需要选择对您和您的需求最有用的那些。
答案 4 :(得分:1)
您还可以在Java 8中使用forEach
:
List<String> myPlayersArrayList = new ArrayList<>();
myPlayersArrayList.stream().forEach((player) -> {
System.out.println("Player: " + player); //Override toString() in Player class
});
答案 5 :(得分:0)
如果您只是想在添加数据后立即显示数据,您可以声明一个Player引用并使其指向您添加到列表中的对象,如下所示:
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;
}
如果您想稍后打印数据,也许您应该看一下迭代器模式。