返回一个已排序的数组,但检查它是否为空

时间:2013-09-01 16:56:30

标签: java

java中的新手。

我正在尝试在java中实现一些基本算法。

但我无法考虑这个基本情况......

public int[] sort(int[] input){

 if (input.length == 0 ) // return error?? but how

 if (input.length == 1) return input

 //sorting algo

}

什么是为空数组抛出错误的好方法?

4 个答案:

答案 0 :(得分:3)

sort函数不应该在给定空数组的情况下返回错误,它应该只返回一个空数组。一个表现良好的泛型函数不应该抛出错误,因为在正常情况下它是完全有效的输入。

如果一个空数组是某个其他语义原因的错误,那么事先应该由函数的调用者检测

如果在您的特定应用程序中,您希望避免在每次sort调用之前重复执行零长度检查,请编写一个显式调用零长度行为的包装函数,然后调用它,例如:

public int[] sortNonEmptyArray(int[] input) {
    if (input.length == 0) {
         throw new IllegalArgumentException("empty array passed");
    }
    return sort(input);
}

答案 1 :(得分:1)

您可以返回IllegalArgumentException,并显示一条消息,指出不允许使用空数组作为参数,或者您可以定义自己的自定义错误类。第一个是更好的,因为它更简单。

但是,如果使用某种divide-and-conquer排序算法,可能会遇到麻烦,并且在递归的一个步骤中,您将一个空数组传递给此方法,该方法被视为已排序(排序数组为零元素) ,是的,那可能发生)。在这种情况下,您应该简单地将空数组作为返回值返回(它也将在递归中形成您的基本条件之一)。

答案 2 :(得分:1)

  public int[] sort(int[] input) {
     if (input==null||input.length == 0) {
          throw new IllegalArgumentException("empty array");
     }
     //sorting algo
     return input;
  }

答案 3 :(得分:0)

我会遵循java.util.Arrays#sort中设置的约定并返回空数组。

Java Doc