Java布尔方法需要额外的return语句吗?

时间:2013-06-08 02:28:28

标签: java methods boolean primes return

我从java开始,当我写一个方法来确定一个数字是否为素数我写了一个这样的方法

public static boolean checkPrime(int n){

    int x = 2;

    while (((n % x) != 0) && (n > x)){
        x = x + 1;
    }

    if(((n % x) == 0) && (n == x)){     
        return !Prime;
    }
    else if(((n % x) == 0) && (n > x)){
        return Prime;
    }
    else {
        return Prime;
    }
}

我无法弄清楚最后一句话的必要性。如果我不把它,我收到一条错误信息。但是我不认为这是必要的,因为前面的循环涵盖了所有可能性,以及它们尊重的返回语句。或者我错过了什么?

6 个答案:

答案 0 :(得分:2)

你不需要别的。编译器告诉你的是方法必须返回SOMETHING。您的上一个else块可以替换为:

return PrimeOrNot;

实际上,您的方法可能如下所示:

public static boolean checkPrime(int n){
    int x = 2;
    while (((n % x) != 0) && (n > x)){
        x = x + 1;
    }
    if(((n % x) == 0) && (n == x)){     
        return !(PrimeOrNot);
    }
    return (PrimeOrNot);
}

在任何情况下,最后语句块不能else if

答案 1 :(得分:1)

该方法的返回类型为boolean。

编译器害怕没有满足'if'案例的可能性。在这种情况下,该方法知道要返回什么。这个方法需要返回一些东西,所以在方法结束之前给它一个'return true'。它永远不会被阅读,但它会使编译器满意。

答案 2 :(得分:1)

if / else-if中的条件表达式仅在运行时进行计算。通常,编译器不知道结果是什么,因为它们不在编译时进行评估。只有,当编译器可以计算出表达式的结果是什么时,它是一些编译时常量(如if(true) {)。

答案 3 :(得分:0)

public static boolean checkPrime(int n){
    boolean PrimeOrNot = false;
    int x = 2;

    while (((n % x) != 0) && (n > x)){
        x = x + 1;
    }

    if(((n % x) == 0) && (n == x)){     
        return !(PrimeOrNot);
    }
    else if(((n % x) == 0) && (n > x)){
        return (PrimeOrNot);
    }

    return PrimeOrNot;
}

答案 4 :(得分:0)

编译器仅检查您的方法是否存在有效的返回路径。编译器不够“智能”,无法检查条件语句并确定条件是否可以在逻辑上满足 - 编译器只需检查以确保返回某些值以遵守方法声明的约定。

有些人认为以下是该方法的清洁结构(但我认为这只是一个品味问题):

public static boolean checkPrime(int n){
    int x = 2;
    while (((n % x) != 0) && (n > x)){
        x = x + 1;
    }

    if(((n % x) == 0) && (n == x)){     
        return !(PrimeOrNot);
    }

    return (PrimeOrNot);
}

答案 5 :(得分:0)

如果在所有可能的代码路径中返回值,则返回值的方法将是可编译的。

想象一下你是编译器。你看到这段代码:

int myMethod()
{
    if (cond)
        return anInt;
}

虽然可能知道cond实际上始终为真,但编译器会知道这一点。如果它是一个只能在编译时计算的表达式,它只能确定布尔表达式的结果。

请注意,Java中的绝大多数“代码优化”实际上是在运行时完成的(JIT:Just In Time)。