java - 关于空指针异常

标签 java nullpointerexception

嗨 我已经编写了这样的代码,但它会返回此异常。我不知道为什么请帮助我,谢谢。

         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/

相关文章:

java - axis Web 服务日志记录问题

java - 在 Tomcat 中访问应用程序上下文根中的文件

java - 无法查看 SQLite 数据库中保存的数据

java - 在特定位置初始化另一个数组时使用数组

java - Java 中的票务系统,但创建成员时 main 中出现 NullPointerException

java - 卡夫卡中的空指针异常

java - 使用 Point2D.double 类型的对象的 setLocation 时出现空指针异常

android - 按钮的 OnClickListener 上的 NullPointerException

Java - 具有可选字段的 JAXB XML 解码

java - GWT JSONObject 覆盖类型(或在共享中使用 JSONObject)