2013-02-10 200 views
14

我已經寫了一個程序,如果數組集合是讓我們說{1,3,6,7,12},它將返回兩個數字之間的最小差距。換句話說,它會首先找到3和1,6和3,7和6以及12和7之間的差異。達到差異後,它將返回最小差異,在我們的情況1中,自6-7 = 1。 例如,如果給出{60}的數組集合,程序將返回0. 現在,如果我們有一個{}的數組集,{}裏面什麼也沒有,它也會返回0。但是,我無法讓我的程序返回0!它引發一個異常。我錯過了什麼?我應該如何解決這個問題?這是我的程序到目前爲止:如何檢查數組是否爲空?

public static void main(String[] args) { 
    int[] numberSet = {1, 3, 6, 7, 12}; 
    //int[] numberSet = {}; 
    System.out.println(minGap(numberSet));  
} 

public static int minGap(int[] numberSet) { 
    int[] differenceArray = new int[numberSet.length-1]; 
    int smallestNum = 0; 
    if (numberSet.length < 2) { 
     return 0; 
    } 
    else { 
     for(int i = 0; i < numberSet.length-1; i++) { 
      differenceArray[i] = numberSet[i+1] - numberSet[i]; 
     }  
     Arrays.sort(differenceArray); 
     smallestNum = differenceArray[0]; 
     return smallestNum; 
    } 
} 

在此先感謝!

回答

10

您的測試:

int[] differenceArray = new int[numberSet.length-1]; 

否則您已經創建了大小-1的陣列中,當:

if (numberSet.length < 2) { 
    return 0; 
} 

,你應該在下面的語句中分配該長度的數組前完成numberSet.length = 0。這很奇怪。因此,請將您的if statement作爲您方法中的第一個聲明。

13

要檢查數組爲null:

int arr[] = null; 
if (arr == null) { 
System.out.println("array is null"); 
} 

要檢查數組爲空:

arr = new int[0]; 
if (arr.length == 0) { 
System.out.println("array is empty"); 
} 
+0

這些不是什麼導致OP的問題。他正在得到一個異常,因爲他在使用它之前沒有測試長度......並且通過嘗試創建長度爲「-1」的數組來使用它。 – 2013-02-10 07:20:31

2

你可以使用yourArray.length到findout在數組中元素的數目。

在做yourArray.length之前確保yourArray不爲空,否則最終將以NullPointerException結束。

1

你的問題是,你沒有測試陣列的長度,直到爲時已晚。

但我只想指出解決此問題的方法是閱讀堆棧跟蹤。

異常消息會清楚地告訴你正在嘗試創建一個長度爲-1的數組,並且跟蹤會告訴你你的代碼的哪一行正在執行此操作。剩下的就是簡單的邏輯......回顧一下爲什麼你使用的長度是-1。