Как получить доступ к данным внутри массива объектов в Java? - PullRequest
0 голосов
/ 29 ноября 2018

Я создал приоритетную очередь, в которой хранятся песни с некоторыми атрибутами (идентификатор, заголовок, лайки).Я хочу напечатать кучу, элемент за элементом в формате, подобном этому примеру:

5 ZZ TOP - La Grange 4167

вместо этого он печатает это:

[null, Song@330bedb4, Song@2503dbd3, Song@4b67cf4d, Song@7ea987ac... ]

Это мой код:

 public class PriorityQueue<T> {
    private T[] heap;
    private int size;
    protected Comparator<T> cmp;

    public PriorityQueue(int capacity, Comparator<T> cmp){
        if(capacity < 1) throw new IllegalArgumentException();
        this.heap = (T[]) new Object[capacity + 1];
        this.size = 0;
        this.cmp = cmp;
    }

    public void print(T[] heap) {
        for (int i=1; i<=size; i++){
            System.out.print(heap[i]);
        }
        System.out.println();
    }

    public void insert ( T ob){
        if(ob == null) throw new IllegalArgumentException();
        if(size == heap.length - 1)throw new IllegalArgumentException();
        heap[++size] = ob;
        swim(size);
    }
}

где-то у меня на главной: (я помещаю значения в эти переменные)

Song s = new Song(id, title, likes);
System.out.println(s.getId() + " " + s.getLikes() + " " + s.getTitle());
pq.insert(s);
pq.print();

Ответы [ 3 ]

0 голосов
/ 29 ноября 2018

Когда вы вызываете:

System.out.print(heap[i]);

То, что печатается, является результатом метода toString () вашего объекта.Ваши объекты не переопределяют метод toString, поэтому то, что вы видите, является результатом метода toString из класса Object.

0 голосов
/ 29 ноября 2018

вы не реализовали метод toString в классе песни.

public class Song {

    @Override
    public String toString() {
        return s.getId() + " " + s.getLikes() + " " + s.getTitle();
    }

}
0 голосов
/ 29 ноября 2018

В классе Song добавить метод:

@Override
public String toString() {
    return getId() + " " + getLikes() + " " + getTitle();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...