0

作成したオブジェクトの個々の要素を表示しようとしています。

これは、ユーザーがプレーヤーの詳細を追加して追跡できるようにする単純な 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;
                    }
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を使用してオブジェクトを作成し、それをarraylistに問題なく入力できますが、印刷しようとすると、次のようなことをしたい

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便利なメソッドをいくつか提供します。、、、、、そして最も重要なのは、この場合はです。addremovesetindexOfcontainsget

リスト内の要素を操作するには、最初にリストから要素を「取得」または取得する必要があります。

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これは通常、ユーザーに表示するのに役立ちません。フォーマッターは、他の開発者にとって必ずしも明白であるとは限りません(十分に文書化されていない限り;))。

あなたはあなたとあなたのニーズに最も役立つものを選ぶ必要があるでしょう。

于 2012-10-15T22:41:33.713 に答える
1

forEachJava 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 に答える