0

我正在尝试显示我创建的对象的各个元素。

它是一个简单的 Java 程序,允许用户添加和跟踪播放器详细信息。

在添加细节后显示细节时,我感到很困惑。这是我的代码的样子

我可以使用案例 2 创建对象并将其输入到数组列表中没有问题,但是当我尝试将其打印出来时,我想做类似的事情

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;
                    }
4

6 回答 6

4

您需要使用索引来访问单个元素:-

for(int i = 0; i < myPlayersArrayList.size(); i++){
    System.out.println(myPlayersArrayList.get(i));
}

然后你可以在你的类中覆盖toString()方法Player

public String toString() {
    return playerName + " : " + playerAge + " : " + playerPosition;
}
于 2012-10-15T21:35:00.817 回答
2

我可以使用案例 2 创建对象并将其输入到数组列表中没有问题,但是当我尝试将其打印出来时,我想做类似的事情

System.out.println("Player Name" + myPlayersArrayList.PlayerName + "Player Position" + myPlayerArrayList.PlayerPosition + "Player Age" + "Player Age");

我知道这是不正确的,但我真的不知道该怎么做,如果有人可以提供任何帮助,将不胜感激。谢谢


只需覆盖toString()方法即可获得所需的输出

于 2012-10-15T21:33:46.780 回答
1

AList是元素的集合。提供了许多有用的List方法来管理它,add, remove, set, indexOf,contains最重要的是,在这种情况下,get.

为了操作列表中的元素,您首先需要从列表中“获取”或检索它。

Listare 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方法中,这通常对向用户显示没有用处。格式化程序对其他开发人员来说并不总是显而易见的(除非他们有充分的文档记录;))。

您将需要选择对您和您的需求最有用的那些。

于 2012-10-15T22:41:33.713 回答
1

您还可以forEach在 Java 8 中使用:

List<String> myPlayersArrayList = new ArrayList<>();
myPlayersArrayList.stream().forEach((player) -> {
    System.out.println("Player: " + player); //Override toString() in Player class
});
于 2015-11-14T11:38:09.917 回答
0

您也可以使用“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());
}
于 2012-10-15T21:40:17.843 回答
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;
}

如果你想稍后打印数据,也许你应该看看迭代器模式。

于 2012-10-15T21:42:33.430 回答