需要一个能够按顺序对整数进行排序的java代码。
这是我代码的一部分,但是当我尝试编译它时,它说它缺少一个return语句。我很困惑如何解决这个问题。
public double getSmallest()
{
if (num1 <= num2 && num1 <= num3)
return num1;
if (num2 <= num1 && num2 <= num1)
return num2;
if (num3 <= num1 && num3 <= num2)
return num3;
}
答案 0 :(得分:1)
如果这些条件都不成立,则必须返回一个值。
要么返回像Double.MIN_VALUE
这样无意义的值(至少在99.9%的情况下毫无意义),要么抛出异常(好多了!):throw new IllegalArgumentException()
。
或者,可能更好:只是重构你的条件,使它们自动默认为一个值,因为这真的是这个方法应该如何工作。像瀑布一样。
答案 1 :(得分:0)
问题是编译器只在return
语句中看到if
个语句。它认为通过具有return
的方法没有保证路径。
这样的事情会起作用:
if(num1 <= num2 && num1 <= num3) {
return num1;
} else if(num2 <= num1 && num2 <= num1) {
return num2;
} else { //by matter of deduction
return num3;
}
另一种可能的解决方案:
public double getSmallest() {
double min = num1;
if(min > num2) {
min = num2;
}
if(min > num3) {
min = num3;
}
return min;
}
请注意,此特定解决方案很容易扩展。如果不是少数数字,而是有array
个数字,则可以将min
分配给第一个索引的值,然后迭代整个集合,将每个索引的值与{{}}进行比较{1}},如果它更小,请重新分配min
。
以上可能是两个最好和最合乎逻辑的解决方案。但是,在所有min
语句之后简单地添加return 0
(或ANY return
语句)将使编译器满意。这会有效......但在我看来它很邋((至少在这种情况下)。
答案 2 :(得分:0)
由于您没有使用else if
链,但根据编译器有三个独立的if
,如果c1
和c2
以及{{1}都是c3
false
首先,由于这些是相互排斥的情况,您可以使用if (c1)
return ..; << not executed
if (c2)
return ..; << not executed
if (c3)
return ..; << not executed
<< code flow arrives here but method ends: no return value
:
else if
但是由于永远不会选择最后一个案例,因为至少有一个条件是真的,你可以简单地去:
if (c1)
return ..;
else if (c2)
return ..;
else if (c3)
return ..;
else
return 0; // will never be called
答案 3 :(得分:0)
关于消息它缺少一个返回语句,这是因为在以下情况中:
满足3条件的条件。
尝试使用以下代码:
public double getSmallest() {
return num1 < num2 ? (num1 < num3 ? num1 : num3) : (num2 < num3 ? num2
: num3);
}
或
public double getSmallest() {
if (num1 < num2) {
return num1 < num3 ? num1 : num3;
} else {
return num2 < num3 ? num2 : num3;
}
}