Ошибка сортировки LinkedList с объектом Item - PullRequest
0 голосов
/ 21 апреля 2020

У меня проблема с созданием метода sort () для моего связанного списка. Это моя реализация Comparable в классе Item.

public class Item implements Comparable <Item>{
   public Date delivered;
   public final String RFIDNR; 
   public String name;
}
public int compareTo(Item other)
   {
      return name.compareTo(other.getItemName());
   }

Это мой метод сортировки в классе связанных списков

public void sort()
      {
          Node node = header.next;
          Node tempNode = null;
          boolean sorted = false;
          while (!sorted)
          {
              sorted = true;
              while (node != null)
              {
                  if (node.itm.compareTo(node.next.itm) > 0) throw new NullPointerException();
                  {
                      tempNode = node.next;
                      node.next = node;
                      node = tempNode;
                      sorted = false;
                  }
                  node = node.next;
              }
          }
      }

Что я пытаюсь сделать здесь, это изменить положение элементов которые не в порядке возрастания и переключить их. Просматривая весь список, пока не будет отсортировано = true. Я сталкиваюсь с ошибками NullPointerException. Любая помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

Решил, используя следующее.

for (int i = 0; i < size; i++)
          {
              Node node = header.next;
              Item temp = null;
              while (node.next != null) {
                  if (node.itm.compareTo(node.next.itm) > 0)
                  {
                      temp = node.next.itm;
                      node.next.itm = node.itm;
                      node.itm = temp;
                  }
                  node = node.next;
              }
          }
0 голосов
/ 21 апреля 2020

Посмотрите на следующий код.

   while (node != null)  {
        if (node.itm.compareTo(node.next.itm) > 0) throw new 
                                                 NullPointerException();
            {

Вы не проверяете, является ли node.next нулевым, поэтому вы пытаетесь сравнить с чем-то, чего нет при попытке получить доступ к node.next.itm .

Я не могу гарантировать конкретное c решение, так как вы не опубликовали свою реализацию, но вам также нужно убедиться, что node.next не равно нулю. Попробуйте следующее:

   while (node != null)  {
        if (mode.next != null && node.itm.compareTo(node.next.itm) > 0) {
                //do the swapping
        }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...