嗨 我已经编写了这样的代码,但它会返回此异常。我不知道为什么请帮助我,谢谢。
private void Scan(DoublyLinkedList dList) { // T(n) = O(n)
DNode p1 = dList.getFirst();
while (p1!=null) {
DNode p2 = p1.next;
System.out.println(p1.getElement().toString()+"lol");
if (p2.next!=null) {
DNode p3 = p2.next;
if(p3.getElement()!=null){
boolean b = Determinate.isPointRightSide(p1.getElement(), p2.getElement(),p3.getElement());
if (b == true) {
p1 = p1.next;
} else {
p1.next = p3;
p3.prev = p1;
dList.remove(p2);
p1 = p1.prev;
}
}
else break;
}else break;}
}
public static double determinate(Object get, Object get0, Object get1) {
double data[][] = new double[3][2];
data[0][0] = ((Point) get).getX();
data[0][1] = ((Point) get).getY();
data[1][0] = ((Point) get0).getX();
data[1][1] = ((Point) get0).getY();
**data[2][0] = ((Point) get1).getX();**
data[2][1] = ((Point) get1).getY();
return ((data[0][0] * (data[1][1] - data[2][1])) - (data[1][0] * (data[0][1] - data[2][1])) + (data[2][0] * (data[0][1] - data[1][1])));
}
异常(exception):
run:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at ConvexHull.Determinate.determinate(Determinate.java:55)
at ConvexHull.Determinate.isPointRightSide(Determinate.java:15)
at ConvexHull.GrahamVersion.Scan(GrahamVersion.java:104)
at ConvexHull.GrahamVersion.grahamScan(GrahamVersion.java:83)
at ConvexHull.GrahamVersion.<init>(GrahamVersion.java:25)
at UI.MainFrame.grahamButtonActionPerformed(MainFrame.java:221)
这将显示“p3”为空!但我检查了“p3”为什么它再次返回“null”? 我使用 strong 来显示那些引发异常的行。
编辑:我已经编辑了我的帖子,但它会抛出“p1”的异常
最佳答案
有一点看起来不对:
if (!p3.equals(null))
这通常总是 true(如果 p3 != null
)或抛出 NullPointerException(如果 p3 == null
)
测试p3是否不为空的正确方法是:
if (p3 != null)
尽管这可能不是您收到 NullPointerException 的原因
如果 NullPointerException 发生在您突出显示的行上,则一定是因为 get1 为 null。这是作为 p3.getElement()
传入的,因此请查明它是否可以为 null。
理论上,如果 data[2]
为 null,则 data[2][0]
会抛出 NullPointerException,但由于您初始化了 data
那么在本例中这将不是问题。
此外,是否有某种原因导致 definate() 的参数是 Object
而不是 Point
?如果这是您的实际代码而不是一些简化的测试用例,那么参数都应该是 Point
因为它们必须是这样。
编辑:
我发现您已更改原始代码以在此页面上添加一些建议。
但我仍然发现一些问题:
while (p1!=null) {
DNode p2 = p1.next;
if (p2.next!=null) {
// ^^^^^^^ If p2 is null, then this will throw NullPointerException
DNode p3 = p2.next;
if(p3.getElement()!=null){
// ^^^^^^^^^^^^^^^ If p3 is null, then this will throw NullPointerException
boolean b = Determinate.isPointRightSide(p1.getElement(), p2.getElement(),p3.getElement());
// ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ if one of these returns null then isPointRightSide() will throw a NullPointerException
关于java - 关于空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4289981/