【问题标题】:Issue sorting LinkedList with Item object使用 Item 对象对 LinkedList 进行排序问题
【发布时间】:2020-04-21 14:44:56
【问题描述】:

我在为我的链表创建 sort() 方法时遇到问题。 这是我在 Item 类中的 Comparable 实现。

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;
              }
          }
      }

我在这里尝试做的是更改非升序元素的位置并切换它们。遍历整个列表,直到 sorted = true。 我遇到了 NullPointerException 错误。 非常感谢任何帮助。

【问题讨论】:

  • 您的代码中有if (...) throw new NullPointerException();。 if 下面的块无论如何都会被执行,如果这个节点的项目大于下一个节点的项目,你会抛出 NullPointerException

标签: java list sorting nodes


【解决方案1】:

看下面的代码。

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

您不检查node.next 是否为空,因此您尝试与尝试访问node.next.itm 时不存在的内容进行比较。

我不能保证一个具体的解决方案,因为您没有发布您的实现,但您还需要确保 node.next 不为空。请尝试以下操作:

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

【讨论】:

    【解决方案2】:

    使用以下方法解决了。

    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;
                  }
              }
    

    【讨论】:

      猜你喜欢
      • 2022-01-25
      • 1970-01-01
      • 2019-05-23
      • 2016-01-16
      • 1970-01-01
      • 2012-09-20
      • 1970-01-01
      • 2015-08-16
      • 2019-01-14
      相关资源
      最近更新 更多