2013-02-10 5 views
14

私は、配列セットが{1,3,6、7,12}と言われた場合、2つの数字の間に最小ギャップを返すプログラムを書いています。言い換えれば、最初に3と1と6と3と7と6と12と7の違いを見つけます。その差が達成された後、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; 
    } 
} 

ありがとうございます!配列がnullで確認するには

答えて

10

あなたのテスト:あなたは、以下の文でその長さの配列を割り当てる前に、

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

が行われる必要があります:

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

ときすでに、サイズ-1の配列を作成していますnumberSet.length = 0。それはかなり奇妙です。したがって、メソッド内の最初のステートメントとしてif statementを移動してください。

13

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'の配列を作成しようとしています。 –

2

あなたは、配列の要素数をfindoutするyourArray.lengthを使用することができます。

yourArray.lengthを実行する前にyourArrayがnullでないことを確認してください。そうしないと、NullPointerExceptionになります。

1

問題は、配列の長さをテストするのが遅すぎることです。

しかし、この問題を解決する方法は、スタックトレースを読むことです。

例外メッセージは、長さ-1の配列を作成しようとしていることを明確に示しています。トレースでは、これを行っているコードの行が正確に示されます。残りの部分は単純なロジックです...あなたが使用している長さが-1である理由に戻って作業してください。

関連する問題