![](/img/trans.png)
[英]A NullPointerException is being thrown but I can't figure out how to fix it.
[英]I can't figure out how to fix error NullPointerException
我认为smallIndex
, index
和temp
都有值,所以我不确定为什么会收到错误。 谁能向我解释为什么会这样? 错误消息是:
线程“主”中的异常java.lang.NullPointerException
public class LinkedList
{
public class LinkedListNode
{
public int info;
public LinkedListNode next;
public LinkedListNode back;
public LinkedListNode()
{
info = 0;
next = null;
back = null;
}
public LinkedListNode(int item)
{
info = item;
next = null;
back = null;
}
public void displayInfo()
{
System.out.print(info + " ");
}
}
protected int count;
protected LinkedListNode first;
protected LinkedListNode last;
public LinkedList()
{
first = null;
last = null;
count = 0;
}
public void initializeList()
{
first = null;
last = null;
count = 0;
}
public boolean isEmpty()
{
return (first == null);
}
public int length()
{
return count;
}
public void print()
{
LinkedListNode current = first;
while (current != null)
{
current.displayInfo();
current = current.next;
}
}
public void insertNode(int insertItem)
{
LinkedListNode newNode = new LinkedListNode(insertItem);
if (isEmpty())
{
first = newNode;
last = newNode;
count++;
}
else
{
last.next = newNode;
newNode.back = last;
}
last = newNode;
}
public LinkedListNode partition(LinkedList list,
LinkedListNode first, LinkedListNode last)
{
LinkedListNode smallIndex = first;
LinkedListNode index = smallIndex.next;
LinkedListNode temp = new LinkedListNode();
int pivot = first.info;
while (index != last.next)
{
if((index.info) < pivot)
{
smallIndex = smallIndex.next;
temp.info = index.info;
index.info = smallIndex.info;
smallIndex.info = temp.info;
}
index = index.next;
}
temp.info = first.info;
first.info = smallIndex.info;
smallIndex.info = temp.info;
System.out.print("The list after QuickSort is: ");
list.print();
System.out.print("\n");
return smallIndex;
}
public void recQuickSort(LinkedList list, LinkedListNode first,
LinkedListNode last)
{
while(first != last)
{
LinkedListNode pivotLocation = partition(list, first, last);
recQuickSort(list, first, pivotLocation.back);
recQuickSort(list, pivotLocation.next, last);
}
}
public void quickSortLinkedList(LinkedList list)
{
recQuickSort(list, list.first, list.last);
}
}
import java.util.*;
public class testLinkedListQuickSort
{
static Scanner console = new Scanner(System.in);
public static void main(String[] args)
{
LinkedList linkedlist = new LinkedList();
int num;
System.out.println("Enter numbers to add to linked list:");
num = console.nextInt();
while (num != 0)
{
linkedlist.insertNode(num);
num = console.nextInt();
}
linkedlist.quickSortLinkedList(linkedlist);
linkedlist.print();
}
}
关于您的评论:您调用分区与
recQuickSort(list, first, pivotLocation.back);
如果pivotLocation.back
为null
则使用last == null
调用分区方法,这将导致您的NPE。
在您的partition()
方法中,您没有为null
值做太多检查。 例如,如果smallIndex
, index
, temp
或last
为null
,那么它将smallIndex
。 还有first
,如果为null
,则会导致NPE。
确保在递归调用中传递的内容不是一个空节点是一个好主意。 我没有看到很多检查。
当您尝试访问没有值的引用时,会发生NullPointerException
。
或在调用空对象的实例方法并访问或修改空对象的字段时。
或者,当您将null传递给需要实际值的方法时。 意思是说空对象被非法使用。
我没有仔细查看您的代码,但要解决此问题,请确定哪个Object实例为null并引起问题。 您将需要修改代码以添加适当的空检查验证
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.