Java:Project Euler 41:泛数字素数

Java:Project Euler 41:泛数字素数,java,primes,Java,Primes,问题: 以下是完整的计划。我的问题是关于一句代码 public class Practice { public static void main(String[] args) { for(double i=7654321;i>1234566;i-=2){ if(isUnique(i)){ if(isPrime(i)){ System.out.println(i);

问题: 以下是完整的计划。我的问题是关于一句代码

public class Practice {
public static void main(String[] args) {
    for(double i=7654321;i>1234566;i-=2){
        if(isUnique(i)){
            if(isPrime(i)){
                    System.out.println(i);
                    break;
            }
        }
    }
    for(double i=4321;i>1233;i-=2){
        if(isUnique(i)){
            if(isPrime(i)){
                    System.out.println(i);
                    break;
            }
        }
    }
}

static boolean isUnique(double num){
    String str = String.valueOf(num);
    for(int i=0;i<str.length();i++){
        if(str.charAt(i)=='9'){return false;}
        if(str.charAt(i)=='8'){return false;}
        if(str.charAt(i)=='0'){return false;}  //<---***Sentence 1***
    }
    for(int i=0;i<str.length()-1;i++){
        for(int j=i;j<str.length()-1;j++){
            if(str.charAt(i)==str.charAt(j+1)){return false;}
        }
    }
    return true;
}

static boolean isPrime(double num){
    for(double i=3;i<=num/2;i+=2){
        if(num%i==0){return false;}
    }
    return true;
}
公共课堂实践{
公共静态void main(字符串[]args){
对于(双i=7654321;i>1234566;i-=2){
如果(是唯一的(i)){
如果(i){
系统输出打印LN(i);
打破
}
}
}
对于(双i=4321;i>1233;i-=2){
如果(是唯一的(i)){
如果(i){
系统输出打印LN(i);
打破
}
}
}
}
静态布尔值是唯一的(双数值){
String str=String.valueOf(num);

对于(int i=0;i由于您使用的是
double
,因此所有
字符串都在表单上

7654321.0

都包含一个
0
,立即结束
isUnique()
调用。改为使用
int
对于调查素数更有意义。

如果使用调试器,您可以看到参数
double num
的值是
7654321.0

.0
导致方法终止。解决方案:不要使用double,而是使用long或int