我在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
类型的结果
答案 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
,它满足编译器。