我正在研究指针的概念。以下列表有假设的指针,一个指向前一个数字,另一个指向下一个数字。并且,还有一个指向当前数字的元素。当我运行代码时,控制台返回“NullPointerException”。代码背后的逻辑对我来说似乎没问题。我是初学者,我真的很感激一些帮助。我试图尽可能多地评论代码,以便更清楚地理解。谢谢。
aux = start; //aux points to the start of the list. both of them are of the type 'List'
int prev = start.num; //prev points to the number on the start position. both of them are of the type 'int'
while (aux.next != null) { //aux.next means the pointer to the next element in the list
if (aux.num >= aux.next.num) { //if the current number is greater than the next number, or equal
prev = aux.next.num; //prev recieves the lower number
aux.next.num = aux.num; //the greater number is put after the lower number
aux.num = prev; //the lower number is put before the greater number
}
aux = aux.next; //the current element takes a step to the next element so I can progress through the list
aux.num = aux.next.num;
}
编辑:我忘了说这个列表必须按升序排序。它也必须按另一种方法降序。
答案 0 :(得分:2)
它发生在你的while循环的最后两行。
aux = aux.next; //the current element takes a step to the next element so I can progress through the list
aux.num = aux.next.num;
在此您指定aux = aux.next
,然后执行aux.num = aux.next.num;
。
如果aux
现在是列表的最后一个元素,则aux.next
为null
,aux.next.num
将投放NPE。
为了防止这种情况,您可以在访问num
之前进行另一项检查:
aux = aux.next;
if(aux.next != null) {
aux.num = aux.next.num;
}
else {
break;
}
答案 1 :(得分:1)
您正在检查aux.next
是否为空,但是您没有检查aux.prox
的这种情况(我相信,prox
是指针)。
修改强>
所以......看看
aux = aux.next;
aux.num = aux.next.num;
您必须检查新aux.next
是否不为空