Проблема с отображением содержимого класса в Java - PullRequest
1 голос
/ 09 июня 2010

Моя проблема в том, что у меня есть класс, и в нем есть список элементов другого класса.

public class Branch
{
    private ArrayList<Player> players = new ArrayList<Player>();
    String brName;
    public Branch() {}
    public void setBr(String brName){this.brName = brName;}
    public String getBr(){return brName;}
    public ArrayList<Player> getPlayers() { return players; }
    public void setPlayers(ArrayList<Player> players) { this.players =new ArrayList<Player>(players);  }
}
public class Player
{
    private String name;
    private String pos;
    private Integer salary;
    private Integer number;

    public Player(String name, String pos, Integer salary, Integer number)
    {
        this.name = name;
        this.pos = pos;
        this.salary = salary;
        this.number = number;
    }

    public Player(){}

    public String getName() { return name; }
    public String getPos() { return pos; }
    public Integer getSalary() { return salary; }
    public Integer getNumber() { return number; }

    public void setName(String name) { this.name = name; }
    public void setPos(String pos) { this.pos = pos; }
    public void setSalary(Integer salary) { this.salary = salary; }
    public void setNumber(Integer number) { this.number = number; }
}

Моя проблема состоит в том, чтобы напечатать игроков отделения с их именем, pos, окладом,число.Для этого я попробовал это просто:

String p1,p2;
int a1,a2;
p1 = input.readLine();
p2 = input.readLine();
a1 = Integer.parseInt(input.readLine());
a2 = Integer.parseInt(input.readLine());
players[0].setName(p1);
players[0].setPos(p2);
players[0].setSalary(a1);
players[0].setNumber(a2);
ptmp.add(players[0]);

myBranch[0].setPlayers(ptmp);

System.out.println(myBranch[0].brName +  "  " + myBranch[0].getPlayers());

Я написал это просто, чтобы попробовать, как отобразить.Я создал массив Players и Branches, чтобы они уже были определены.Проблема в том, что getPlayers() не дает мне никакого результата.Как это сделать?

Ответы [ 4 ]

1 голос
/ 09 июня 2010

Когда вы пытаетесь println или объединить ArrayList (как вы делаете, когда делаете " " + myBranch[0].getPlayers(), метод ArrayList.toString() вызывается для возврата строкового представления содержимого списка.

ArrayList.toString() вернет строку, содержащую результат toString() каждого элемента в списке (это поведение фактически определено в одном из его родительских классов AbstractCollection.

Поскольку ваш класс Player не переопределяет реализацию toString(), предоставляемую java.lang.Object, выходные данные, скорее всего, будут выглядеть как packagename.Player@a8f123.

Итак, если вы хотите получить значимый вывод при вызове ArrayList.toString() для списка Player объектов, вы должны переопределить toString() в Player, чтобы обеспечить строковое представление Player, которое вы хотел бы вернуться.

0 голосов
/ 11 октября 2015

Что еще никто не сказал, так это то, что использование вектора, как у вас, дало вам возможность просто действовать с this.add() для инициализации новых игроков, это, конечно, вызывает глубокое копирование игроков, ноони будут в порядке, где они находятся в своих пустышках, они могут играть оттуда.Это лучше, чем создавать новый массив каждый раз, когда объявляется новый игрок.

0 голосов
/ 09 июня 2010

Дайте классу Player методы toString () следующим образом:

@Override
public String toString() {
    return "Player [name=" + name + ", number=" + number + ", pos=" + pos
            + ", salary=" + salary + "]";
}
0 голосов
/ 09 июня 2010

++ к тому, что говорит Мэтт Б. Другой способ сделать это - переопределить toString для Branch, чтобы циклически проходить по списку массивов и возвращать информацию о каждом проигрывателе (возможно, вызов toString, который рекомендует matt b, определен в классе Player).

...