#java #linked-list #circular-list
#Ява #связанный список #круговой список
Вопрос:
Я пытаюсь использовать круговой двусвязный список для создания Mp3-плеера, который может воспроизводить предыдущие, следующие и текущие песни, а также добавлять, удалять и искать песни. Но у меня возникли проблемы с моими предыдущими и следующими методами. Вот мой код (извините за мой плохой код)
public class CreateList{ Node head = null; public class Node { String path; Node next; Node prev; } public void play() { Node current = head; if (head == null) { System.out.println("List is empty"); } else { do { String path = current.path; fr.play(path); // goes to another class that reads and plays the file current = current.next; } while (current != head); } } public void prev(){ Node current = head.prev; if (head == null) { System.out.println("empty playlist"); } else { String path = current.path; fr.play(path); } } public void next() { Node current = head.next; if (head == null) { System.out.println("empty playlist"); } else { String path = current.path; fr.play(path); } } public void add(String path) { if (head == null) { Node new_node = new Node(); new_node.path = path; new_node.next = new_node; new_node.prev = new_node; head = new_node; return; } Node last = (head).prev; Node new_node = new Node(); new_node.path = path; new_node.next = head; (head).prev = new_node; new_node.prev = last; last.next = new_node; }
Что я делаю не так? Большое спасибо.
Комментарии:
1. Откуда берется
head
переменная ? Похоже, что раньше он не был определен, но вы все равно используете его так, как раньше… Разве это не должно быть среди аргументов методов ?2. @maggle о, я забыл добавить его сюда, я объявил его нулевым, я отредактировал его сейчас
3. Это однопоточное приложение? В
play()
вас естьdo/while
цикл для воспроизведения списка. Пока идет этот цикл, ничего другого произойти не может — если только вы не многопоточны. Такnext()
иprev()
неуместны.4. Во всяком случае, как бы то ни было,
next()
всегда играетhead.next
иprev()
всегда играетhead.prev
. Вам нужен какой-то способ отслеживать то, что в данный момент воспроизводится. Возможно, переменной — членом класса. Или передавать переменную каждой функции.5. @JohnnyMopp многопоточный, спасибо за предложение, я свяжусь с вами по этому поводу