我试图解决代码高尔夫问题,但我遇到了一个意想不到的问题。看起来Java的BigInteger类正在抛出一个NoClassDefFoundError。这是我的代码 -
import java.math.BigInteger;
public class UnGolfed {
int sum=0;
BigInteger num = new BigInteger("0");
int left;
UnGolfed(int i){
left=i;
}
public static void main(String[] args) {
(new UnGolfed(Integer.parseInt("1"))).doIt();
}
void doIt() {
for(int i=left;i>0;i--){
sum+=getNextHappy(num=num.nextProbablePrime());
}
System.out.print(sum);
}
int getNextHappy(BigInteger b) {
try{
String s = b.toString();
int tSum=0;
for(char c : s.toCharArray()){
tSum+=(c-48)*(c-48);
}
if(tSum==1) return num.intValue();
return getNextHappy(new BigInteger(tSum+""));
}
catch(StackOverflowError e){
return getNextHappy(num=num.nextProbablePrime());
}
}
}
如果您对代码高尔夫挑战感到好奇,可以找到前N个幸福素数的总和。当我运行它虽然我得到以下 -
Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class java.security.SecureRandom
at java.math.BigInteger.getSecureRandom(BigInteger.java:875)
at java.math.BigInteger.passesMillerRabin(BigInteger.java:898)
at java.math.BigInteger.primeToCertainty(BigInteger.java:739)
at java.math.BigInteger.nextProbablePrime(BigInteger.java:690)
at UnGolfed.getNextHappy(UnGolfed.java:33)
at UnGolfed.getNextHappy(UnGolfed.java:30)
at UnGolfed.getNextHappy(UnGolfed.java:30)
.....
.....
.....
注意:我知道这段代码有很多问题(可能会遇到无限循环并导致堆栈溢出错误等)。请忽略这些,我可以稍后解决。我只是想知道为什么这个NoClassDefFoundError即将出现