计算素数的方法 - [JAVA]

时间:2015-10-31 02:30:54

标签: java

我需要构建一个计算家庭作业素数的方法。我实施了我教授提出的算法,但它没有用。

Eclipse提供消息:The local variable prime may not have been initialized并且不编译。

有人可以帮助我吗?

public static boolean itsPrime(int nbTest){

    boolean prime;

    if (nbTest <= 1){
         prime = false;
    } else if (nbTest == 2){       // Two is the only even number that is prime
        prime = true;
    } else if ((nbTest != 2) && (nbTest % 2 == 0)){    // If it's even and different than two it is not prime
        prime = false;
    } else {
        for(int i = 3; i <= Math.sqrt(nbTest); i = i+2){ 
            if (nbTest % i == 0){
                prime = false;
            } else {
                prime = true;
            }
        }   
    }

    return prime;
}   

2 个答案:

答案 0 :(得分:2)

在声明变量时只需初始化它。 EG

boolean prime = false;

答案 1 :(得分:1)

您没有在代码中初始化变量prime。通过查看它,您看到if语句的每个分支都为prime赋值。但是,有一个例外情况,如果for循环没有被执行怎么办?那么prime的值是未知的!这就是错误出现的原因。

如果循环没有执行,我想你想返回false,所以当你声明它时,只需用prime初始化false

boolean prime = false;

为了让您的代码更好,而不是仅仅为prime分配值,您只需返回!让我告诉你完整的代码:

public static boolean itsPrime(int nbTest){

    boolean prime = false;

    if (nbTest <= 1){
         return false;
    } else if (nbTest == 2){       // Two is the only even number that is prime
        return false;
    } else if ((nbTest != 2) && (nbTest % 2 == 0)){    // If it's even and different than two it is not prime
        return false;
    } else {
        for(int i = 3; i <= Math.sqrt(nbTest); i = i+2){ 
            if (nbTest % i == 0){
                prime = false;
            } else {
                prime = true;
            }
        }   
    }

    return prime;
}