Сохранить экземпляр с другими данными в ArrayList

Я пытаюсь сохранить разные объекты одного и того же класса в ArrayList, из экземпляра, свойства которого меняются, я не знаю, объясню ли я сам. Ниже приведен код, иллюстрирующий то, что я хочу сделать.

Класс игрока:

package jugadores;

public class Jugador {
    private String nombre;
    private int puntuacion;

    public Jugador() {}
    public Jugador( String nombre, int puntuacion ) {
        this.nombre     = nombre;
        this.puntuacion = puntuacion;
    }

    public String getNombre() {
        return nombre;
    }
    public int getPuntuacion() {
        return puntuacion;
    }
    public void setNombre( String nombre ) {
        this.nombre = nombre;
    }
    public void setPuntuacion( int puntuacion ) {
        this.puntuacion = puntuacion;
    }

} //class

Основной класс:

package jugadores;
import java.util.ArrayList;
import java.util.List;

public class Main {

    private static String player1     = "Pepe";
    private static String player2     = "Leo";
    private static int score_player1  = 100;
    private static int score_player2  = 92;
    private static Jugador player;
    private static List<Jugador> players_list = new ArrayList();


    public static void main( String[] args ) {

        //Jugador 1
        player = new Jugador( player1, score_player1 );
        players_list.add( player );

        //Jugador 2
        player.setNombre( player2 );
        player.setPuntuacion( score_player2 );
        players_list.add( player );

        test();
    }

    private static void test() {

        int size = players_list.size();

        for ( int x = 0; x < size; x++ ) {

            player = players_list.get( x );     
            tracePlayer( player );
        }
    }

    private static void tracePlayer( Jugador x ) {

        System.out.println( x.getNombre( ));
        System.out.println( x.getPuntuacion( ));
        System.out.println( "------------------" );
    }

} //class

Когда это выполняется, я хочу напечатать данные игрока 1, а затем данные игрока 2, то есть, что в ArrayList сначала сохраняется один игрок, а затем другой, и в итоге не сохраняются копии последнего сохраненного игрока.

Для упрощения я использовал только двух игроков, чьи данные я включаю в основной класс, но он должен работать с источником данных, который будет генерировать неопределенное количество игроков. Поскольку я не знаю, сколько будет игроков, я не могу создать экземпляр для каждого из них.

0
задан 16.01.2017, 02:39
0 ответов

То, за чем оно последует, состоит в том, что то, что сохраняет в ArrayList, является ссылкой на объект player, каждый раз, когда менять player то, что ты делаешь, - sobreescribir Ваши данные и в ArrayList то, что есть, является указателем, который он говорит, где искать в конце концов данные. Если ты хочешь использовать того же идентификатора "player", ты должен тогда всегда, перед тем, как помещать ему данные объявлять это, он был бы так.

    //Jugador 1
    player = new Jugador( player1, score_player1 );
    players_list.add( player );

    //Jugador 2
    player = new Jugador() //<<<<<<<<<<<<<<<<<<<<<<
    player.setNombre( player2 );
    player.setPuntuacion( score_player2 );
    players_list.add( player );
2
ответ дан 03.12.2019, 17:40

Будь должен делать секунду new, как тебе сказал друг раньше, для того, чтобы в 2-ом положении списка, существовал новый объект, а у тебя будет список с двумя элементами, которые содержат оба та же ссылка на тот же объект, что я меняю состояния 1 в состояние 2, и остался таким последний раз, что setearon

Добавляет new, чтобы создавать вторую инстанцию

public static void main( String[] args ) {

    //Jugador 1
    player = new Jugador( player1, score_player1 );
    players_list.add( player );

    //Jugador 2


    player = new Jugador( player2, score_player2 );
    players_list.add( player );

    test();
}
0
ответ дан 03.12.2019, 17:40