2017-02-10 6 views
0

У меня в основном не было проблем со связанными списками на C++, но по какой-то причине это доходит до меня. У меня был один узел, который был распечатан с использованием других классов в пакете, который был предоставлен, но по мере того, как я продолжаю, я просто продолжаю сталкиваться с стенами.Как отлаживать мою очередь связанных Java-списков?

Код, приведенный ниже, находится в руинах из-за того, что я возился. Я просто не знаю, куда идти отсюда. На данный момент появляется исключение нулевого указателя.

Только для информации: poll() просто снимает текущую головку и возвращает ее, offer() добавляет в тыл. На данный момент исключение составляет oldLast.next = last в методе предложения.

Я не прошу никого, чтобы полностью решить эту проблему. Мне просто нужны подсказки для прогресса.

public class FIFOQueue implements Queue { 

//put your name as the value of the signature. 
String signature = "name"; 

Node head = new Node(null); 
Node pointer = head; 
Node first; 
Node last; 
Node prev; 
Node curr; 

class Node { 
    Process process; 
    Node next; 


    Node(Process p) { 
     this.process = p; 
     this.next = null; 
    } 

} 

@Override 
public void offer(Process p) { 


    if(head == null) 
    { 
     head = new Node(p); 
     first = head; 
     last = head; 

    } 

    else 
    { 

     Node oldLast = last; 
     Node newNode = new Node(p); 

     last = newNode; 
     oldLast.next = last; 


    } 



} 


@Override 
public Process poll() { 


    if(isEmpty()) 
     throw new NoSuchElementException(); 

    Node oldPointer = first; 

    first = first.next; 
    head = first; 


     return oldPointer.process; 
} 

@Override 
public boolean isEmpty() { 

return head == null; 

} 

@Override 
public String getSignature() { 
    return signature; 
} 

} 
+1

Вы должны быть более конкретными. У вас больше шансов получить ответ, если вы скажете: «Я получаю« ArrayIndexOutOfBoundsException »в строке 15», чем «Вещи не работают, и я надеюсь, что вы можете мне помочь». – Kayaman

+0

Правда, извините. На данный момент я получаю исключение из «\t \t \t oldLast.next = last;» в функции предложения. – Clannadqs

+0

Если вы получаете «NPE» оттуда, то ваш «oldLast» имеет значение null. См. Http://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it для всякий раз, когда вы получаете «NullPointerException». – Kayaman

ответ

0

Я думаю, что ваш основной вопрос здесь:

Node prev; 
Node curr; 

Они путают. Удалить их.

  1. Node prev; - Это должно быть класс Node.
  2. Node curr; - Это должна быть локальная переменная, а не переменная экземпляра.

Также

Node head = new Node(null); 

не гель с

if(head == null) 
{ 
    head = new Node(p); 

Либо сделать head == null означает список пуст или что-то другое - но быть последовательным.

+0

Не думаю, что я тоже использовал. Это незавершенная работа, над которой я возился, чтобы увидеть, работает ли что-то. Использование этих двух переменных было моим следующим шагом. Я только объявил их до сих пор. – Clannadqs

+0

Проснулся и увидел ваше редактирование. Спасибо, что вернулся ко мне. Я немного смущен тем, как эти два не выстраиваются в линию. Должна ли голова оставаться нулевой? – Clannadqs

+0

Ваш комментарий в основном помог мне решить мою проблему. Выяснилось, что первоначальная проверка должна была убедиться, что фактические данные в узле были нулевыми, а не проверяли, был ли весь узел нулевым. Благодаря! – Clannadqs

0

(Отправлено от имени ОП).

public void offer(Process p) { 


    if(head.process == null) 
    { 
     head = new Node(p); 
     first = head; 
     last = head; 
    } 


     last.next = new Node(p); 
     last = last.next; 

} 

Это решило мою проблему. Не могу поверить, что я путаю это.

Смежные вопросы