需要创建一个将对数字进行排序的java代码

时间:2013-11-14 02:17:36

标签: java sorting

需要一个能够按顺序对整数进行排序的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;


    }

4 个答案:

答案 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,如果c1c2以及{{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;
       }
    }