如何在此代码中处理java.lang.NullPointerException

时间:2014-04-05 12:29:27

标签: java exception-handling

这是我的代码 并抛出java.lang.NullPointerException 我尝试使用此网站上的其他类似主题来处理它,但它没用。

import java.math.BigInteger;
import java.lang.Long;


public class Tamrin7 {

    public static  BigInteger ZERO;
    public static  BigInteger ONE;
    public static  BigInteger TEN;
    public static void main(String[] args){

        BigInteger a = ZERO ;
        BigInteger b = ZERO ;
        BigInteger increment = ONE ;
        int counter = 0 ;
        int thirteen = 13;
        BigInteger bigInt = new BigInteger(String.valueOf(thirteen));
        while(counter != 10000){
            b = a.add(inverse(a))   ;
            if (b.remainder(bigInt) == ZERO)
                ++counter;
            a = a.add(increment);
        }//end of while

        String finall = b.toString();

        System.out.printf("the value of the 10000th number is %s :" , finall );


    }//end of main
    public static BigInteger inverse (BigInteger c){
        BigInteger inversedNum = ZERO ; 
        while (c != ZERO){
            inversedNum = inversedNum.multiply(TEN).add(c.remainder(TEN));
            c = c.divide(TEN);
        }//end of while
        return inversedNum ;
    }
}//end of class

4 个答案:

答案 0 :(得分:3)

你在哪里初始化这些:

public static  BigInteger ZERO;
public static  BigInteger ONE;
public static  BigInteger TEN;

我不认为你这样做:

public static  BigInteger ZERO = BigInteger.ZERO;
public static  BigInteger ONE = BigInteger.ONE;
public static  BigInteger TEN = BigInteger.TEN;  

或者,如果你进入import static,那么:

import static java.math.BigInteger.ZERO;
import static java.math.BigInteger.ONE;
import static java.math.BigInteger.TEN;

删除你的声明。

还有:

new BigInteger(String.valueOf(thirteen));

稍微哭了一下:

BigInteger.valueOf(thirteen);

会做得很好。

答案 1 :(得分:0)

有:

public static  BigInteger ZERO;
public static  BigInteger ONE;
public static  BigInteger TEN;

看起来他们需要初始化。 e.g。

public static  BigInteger ZERO = BigInteger.ZERO;

否则它们只是声明的对象引用,因此为null。

答案 2 :(得分:0)

这里有几个问题。

public static  BigInteger ZERO;
public static  BigInteger ONE;
public static  BigInteger TEN;

这些永远不会用值初始化,这就是为什么你首先得到空指针的原因。 如果您希望这样做,您应该创建对象或提供对现有对象的引用。

像这样:

public static final BigInteger ZERO = BigInteger.ZERO;
public static final BigInteger ONE = BigInteger.ONE;
public static final BigInteger TEN = BigInteger.TEN;

但是你应该使用BigInteger.ZERO而不是在你的代码中重新声明它们。

另外,不要这样做:

 BigInteger bigInt = new BigInteger(String.valueOf(thirteen));

BigInteger有一个工厂方法,可以使用plain int,而不必将其转换为String。

像这样:

 BigInteger bigInt = BigInteger.valueOf(thirteen);

答案 3 :(得分:-1)

您需要初始化ZERO,ONE和TEN。

我想你想做这样的事情:

public static final BigInteger ZERO = BigInteger.ZERO;
public static final BigInteger ONE = BigInteger.ONE;
public static final BigInteger TEN = BigInteger.TEN;

你不需要将它们声明为常量,但你可以只是它们。