Java:return语句编译错误

时间:2016-04-10 16:58:29

标签: java if-statement syntax compilation compiler-errors

我在Java中编写了以下代码,但是在#34;主要" java.lang.Error:未解决的编译问题:"

    public static int guessNum (int num){
        if (num == 0){
            throw new IllegalArgumentException();
        }

        if (num > 0){
            return 1;
        }

        if (num < 0){
            return 0;
        }
    }

当我将最后一个if语句更改为else{return 0;}时,错误消失了。

我想知道是否有办法将最后一个if语句保留为if()而不是else{},因为我认为前者更具可读性。

编辑: 假设我在main方法中运行此方法:

public static void main (String[] args){
    System.out.println(guessNum(10));
}

发生错误:

  

线程中的异常&#34; main&#34; java.lang.Error:未解决的编译问题:       此方法必须返回int

类型的结果

3 个答案:

答案 0 :(得分:3)

您收到错误是因为您的方法返回了&#39; int&#39;。 您的所有退货声明都包含在&#39;如果&#39;条件。编译器会抱怨您的条件可能不会满足(即使它们是 - 您正在检查所有情况)。

您需要提供默认的return语句。实际上,最后一个if是不必要的,因为如果num是!= 0而不是&gt;那么它必须是&lt; 0

将方法更改为:

public static int guessNum (int num){
    if (num == 0){
        throw new IllegalArgumentException();
    }

    if (num > 0){
        return 1;
    }

    return 0; //The other conditions were not met so this must be the result
}

答案 1 :(得分:2)

可能是因为您的方法需要返回一个整数值,但仅使用if语句并不能保证返回一个整数。所以使用以下内容来解决问题:

public static int guessNum (int num){
    if (num == 0){
        throw new IllegalArgumentException();
    } else if (num > 0){
        return 1;
    } else {
        return 0;
    }
}

答案 2 :(得分:1)

Java编译器发现,如果不满足这三个条件(尽管这是不可能的),则没有return语句。可能的解决方法是在if s下添加以下行:

throw new AssertionError("Impossible to reach.");

应抛出AssertionError以指示断言失败,包括何时满足不可能的条件。它也在不可能的情况下终止方法,if s都不是true,它满足编译器。