0

需要一个按顺序对整数进行排序的java代码。

这是我的代码的一部分,但是当我尝试编译它时,它说它缺少返回语句。我对如何解决这个问题感到困惑。

 public double getSmallest()
   {

      if (num1 <= num2 && num1 <= num3)

          return num1;


      if (num2 <= num1 && num2 <= num1)

          return num2;


      if (num3 <= num1 && num3 <= num2)

          return num3;


    }
4

4 回答 4

1

在这些条件都不为真的情况下,您必须返回一个值。

要么返回一个无意义的值Double.MIN_VALUE(至少,在 99.9% 的情况下是无意义的),要么抛出一个异常(好多了!)throw new IllegalArgumentException():。

或者,可能更好:只需重构您的条件以使其自动默认为一个值,因为这确实是该方法应该如何工作的。像瀑布一样。

于 2013-11-14T02:19:57.840 回答
0

关于 message它缺少 return 语句,这是因为在以下情况下:

如果条件满足,这三个都不是。

试试下面的代码:

    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;
       }
    }
于 2013-11-14T02:25:52.427 回答
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给第一个索引的值,然后遍历整个集合,将每个索引处的值与 进行比较min,如果它更小,则重新分配min


以上可能是两个最好和最合乎逻辑的解决方案。但是,在所有语句之后简单地添加return 0(或任何语句)将使编译器满意。这会起作用......但在我看来它很草率(至少在这种情况下)。returnif

于 2013-11-14T02:19:16.017 回答
0

由于根据编译器,您没有使用链,而是使用三个分隔的 s,所以可能发生的情况是ifelse if和are allifc1c2c3false

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

但由于永远不会选择最后一种情况,因为至少有一个条件为真,你可以简单地去:

if (c1)
  return ..;
else if (c2)
  return ..;
else
  return ..;
于 2013-11-14T02:20:51.397 回答