这是我的代码
并抛出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
答案 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;
你不需要将它们声明为常量,但你可以只是它们。