14

配列セットが{1、3、6、7、12}の場合、2つの数値間の最小ギャップを返すプログラムを作成しました。つまり、最初に 3 と 1、6 と 3、7 と 6、12 と 7 の違いを見つけます。それらの違いが得られた後、最小の違い (この場合は 1) を返します。 =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;
    }
}

前もって感謝します!

4

4 に答える 4

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");
}
于 2013-02-10T06:27:52.323 に答える
10

あなたのテスト:

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

以下のステートメントでその長さの配列を割り当てる前に行う必要があります。

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

-1それ以外の場合は、既に size の配列を作成していますnumberSet.length = 0。それはかなり奇妙です。したがって、if statementメソッドの最初のステートメントとして移動します。

于 2013-02-10T06:28:49.553 に答える
2

yourArray.length配列内の要素数を調べるために使用できます。

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

于 2013-02-10T06:27:59.400 に答える
1

あなたの問題は、手遅れになるまで配列の長さをテストしていないことです。

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

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

于 2013-02-10T07:25:28.323 に答える