Создание списка воспроизведения MP3 с использованием кругового двусвязного списка

#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 многопоточный, спасибо за предложение, я свяжусь с вами по этому поводу