我创建了一个优先级队列,其中包含具有某些属性(id,title,likes)的歌曲。 我想以类似此示例的格式逐元素打印堆:
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();
答案 0 :(得分:0)
在类Song
中添加方法:
@Override
public String toString() {
return getId() + " " + getLikes() + " " + getTitle();
}
答案 1 :(得分:0)
致电时:
System.out.print(heap[i]);
输出的是对象的toString()方法的结果。您的对象不会覆盖toString方法,因此您看到的是Object类中toString方法的结果。
答案 2 :(得分:0)
您尚未在歌曲类中实现toString方法。
public class Song {
@Override
public String toString() {
return s.getId() + " " + s.getLikes() + " " + s.getTitle();
}
}