Иметь очередь с реализацией Generics для печати определенных атрибутов объекта - PullRequest
0 голосов
/ 02 декабря 2018

Я создал простую очередь типа, которая также содержит функцию print ().

открытый класс ArrayQueue реализует очередь {

private T[] theArray;   
private int currentSize;    
private int front;  
private int back;

private static final int DEFAULT_CAPACITY = 10;


public ArrayQueue() {
    theArray = (T[]) new Object[DEFAULT_CAPACITY];
    currentSize = 0;
    front = 0;
    back = -1;
}


public boolean isEmpty() {
    return currentSize == 0;
}


public T dequeue() throws EmptyQueueException {
    if (isEmpty())
        throw new EmptyQueueException("ArrayQueue dequeue error");
    T returnValue = theArray[front];
    front = increment(front);
    currentSize--;
    return returnValue;
}


public void enqueue(T x) {
    if (currentSize == theArray.length)
        doubleQueue();
    back = increment(back);
    theArray[back] = x;
    currentSize++;
}


private int increment(int x) {
    if (++x == theArray.length)
        x = 0;
    return x;
}




public void print() {
    if (isEmpty()) {
        System.out.printf("Empty queue\n");
        return;
    }

    System.out.printf("The queue is: ");
    for (int i = front; i != back; i = increment(i)) {
        System.out.print(theArray[i] + " ");
    }
    System.out.print(theArray[back] + "\n");
}

Я также создал объект Song с 3 переменными

открытый класс Song {

private int id;
private String name;
private int likes;

public Song() {

    this(1,"Test",10);
}


public Song(int id,String name, int likes) {

}


public int getId() {
    return id;
}


public void setId(int id) {
    this.id = id;
}


public String getName() {
    return name;
}


public void setName(String name) {
    this.name = name;
}


public int getLikes() {
    return likes;
}


public void setLikes(int likes) {
    this.likes = likes;
}  

Есть ли способ изменить эту функцию, чтобы напечатать информацию о конкретном объекте, или мне нужно написать другой метод печати во время моей реализации?

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

ArrayQueue<Song> arrayQueue = new ArrayQueue<Song>();

Queue<Song> queue = arrayQueue; //arrayQueue instance is also a Queue


Song s = new Song();
arrayQueue.enqueue(s);
arrayQueue.print();

Результат

Очередь: Song @ 15db9742

Myмодификация будет печатать:

Очередь: 1 Тест 10

1 Ответ

0 голосов
/ 02 декабря 2018

Вам необходимо переопределить метод toString () в Song.

Например, добавить это в Song:

@Override
public String toString() {
    return id + " " + name + " " + likes;
}
...