在Java中捕获的NullPointerException [关闭](Catching nullpo

2019-07-20 18:31发布

我试着用try-catch块捕捉NullPointerException ,但仍然后面的程序给错误。 我是不是做错了什么或有任何其他方式捕捉NullPointerException下面的程序。 任何帮助,高度赞赏。

public class Circular_or_not 
{

    /**
     * @param args
     */
    public static void main(String[] args) 
    {
        // TODO Auto-generated method stub
        try
        {
            LinkedListNode[] nodes = new LinkedListNode[10];            
            for (int i = 0; i < 10; i++) 
            {
                nodes[i] = new LinkedListNode(i, null, i > 0 ? nodes[i - 1] : null);
            }

            // Create loop;
            // nodes[9].next = nodes[3];
            Boolean abc= Check_Circular(nodes[0]);
            System.out.print(abc);
        }
        catch(NullPointerException e)
        {
            System.out.print("NullPointerException caught");
        }

    }

    public static boolean Check_Circular(LinkedListNode head) 
    {       
            LinkedListNode n1 = head;
            LinkedListNode n2 = head; 

            // Find meeting point
            while (n2.next != null)
            { 
                n1 = n1.next; 
                n2 = n2.next.next; 
                if (n1 == n2) 
                { 
                    return true;
                }
            }
            return false;
    }

}

Answer 1:

NullPointerException是不推荐使用运行时异常抓住它,而是避免它:

if(someValriable != null) someValriable.doSomething();
else
{
    // do something else
}


Answer 2:

作为另一个答案中已经指出, 建议赶一个NullPointerException。 但是你肯定能赶上它,就像下面的例子说明。

public class Testclass{

    public static void main(String[] args) {
        try {
            doSomething();
        } catch (NullPointerException e) {
            System.out.print("Caught the NullPointerException");
        }
    }

    public static void doSomething() {
        String nullString = null;
        nullString.endsWith("test");
    }
}

虽然NPE可以肯定抓住你不应该这样做,但解决这个问题初始,这是Check_Circular方法。



Answer 3:

与你的代码的问题是在你的Check_Circular循环。 您正在使用N1通过一次去一个节点在列表中前进。 通过重新分配N2到n2.next.next你通过它每次两个推进。

当你这样做,n2.next.next可以为空,所以N2将是转让后空。 当循环重复,并检查是否n2.next不为空,则抛出NPE,因为它不能得到下一个,因为N2已经是空。

你想做些什么像什么亚历克斯贴吧。



Answer 4:

我觉得你的问题是内部CheckCircular,在while条件:

假设你有2个节点,第一N1和N2都指向同一个节点,则N1点到第二个节点(最后)和N2指向NULL(因为它是N2.next.next)。 在接下来的循环,你尝试调用N2上的“下一步”的方法,但N2为空。 有你有它,NullPointerException异常



Answer 5:

你应该抓住NullPointerException与上面的代码,但是这并不能改变一个事实,即你的Check_Circular是错误的。 如果您修复Check_Circular ,你的代码不会引发NullPointerException摆在首位,并像预期的那样。

尝试:

public static boolean Check_Circular(LinkedListNode head)
{
    LinkedListNode curNode = head;
    do
    {
        curNode = curNode.next;
        if(curNode == head)
            return true;
    }
    while(curNode != null);

    return false;
}


文章来源: Catching nullpointerexception in Java [closed]