2013-09-01 97 views
2

java中的新手。返回一個排序數組,但檢查它是否爲空

我想在java中實現一些基本的算法。

不過,我不能去想這個基本情況..

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

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

if (input.length == 1) return input 

//sorting algo 

} 

最新拋出錯誤空數組的好辦法?

+0

你可以使用'如果(input.length == 0)拋出新拋出:IllegalArgumentException( 「陣列應該是非零長度」)'。另一種選擇是使用斷言來檢查數組的長度。 – svz

+7

爲什麼不只是返回輸入本身?一個空數組默認排序。 – Kon

回答

3

它不應該是sort函數的責任返回給定一個空數組的錯誤,它應該只是返回一個空數組。一個表現良好的通用函數不應該爲正常情況下的某個完全有效的輸入引發錯誤。

如果一個空陣列對於某些其他語義原因是錯誤的,那麼應該事先由該函數的調用者檢測

如果在特定的應用程序要避免每次sort調用之前執行零長度檢查的重複,編寫一個包裝函數,明確要求從零長度行爲,然後調用那個代替,例如:

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

您可以返回IllegalArgumentException並附帶一條消息,指出不允許使用空數組作爲參數,也可以定義您自己的自定義錯誤類。第一個更好,因爲它更簡單。

但是,如果您使用某種排序算法0​​,並且在遞歸過程的一個步驟中將空數組傳遞給此方法(該方法被視爲已排序)(有零元素的排序數組,這可能發生)。在這種情況下,您應該簡單地返回空數組作爲返回值(它也將形成遞歸中的一個基本條件)。

0

我會遵循java.util.Arrays#sort中設定的約定並返回空數組。

Java Doc

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