3

私はJavaの初心者で、配列の使い方を学んでいます。Array の二分探索法を使用すると、エントリが見つからない場合に負の数が返されることを理解しています。ただし、次のコードでは、9、10、および 11 に対して負の数が返されます。

誰かが私が間違っていることを指摘するのを助けることができるかどうか疑問に思っていますか? ありがとう!

   String [] oneToSixteen = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16"};

   System.out.println("Searching for 7: "+ Arrays.binarySearch(oneToSixteen, "7"));
   System.out.println("Searching for 8: "+ Arrays.binarySearch(oneToSixteen, "8"));
   System.out.println("Searching for 9: "+ Arrays.binarySearch(oneToSixteen, "9"));
   System.out.println("Searching for 10: "+ Arrays.binarySearch(oneToSixteen, "10"));
   System.out.println("Searching for 11: "+ Arrays.binarySearch(oneToSixteen, "11"));

私が得る出力は次のとおりです。

Searching for 7: 6
Searching for 8: 7
Searching for 9: -17
Searching for 10: -2
Searching for 11: -2

どんな助けでも大歓迎です。

4

3 に答える 3

9

これは、配列が an の配列でStringあり、並べ替えられていないためintです。

ドキュメントには、検索対象の配列をソートする必要があり、そうでない場合、結果は未定義であることが明確に記載されています。

配列をソートするには、Arrays クラスのsort メソッドを使用できます。

于 2012-05-08T06:15:16.237 に答える
0

否定は、文字列が見つかって配列に挿入される component-1 を指し、配列がソートされていないために表示されます。要素が見つかりません。したがって、配列「9」が -17 の場合、コンポーネント 16 に挿入されます。「10」はコンポーネント 1 に挿入され、「11」はコンポーネント 1 に挿入されます。

Arrays メソッドはオーバーロードされているため、Array のタイプは重要ではありません。

並べ替え

Arrays.sort(oneToSixteen);

次に、binarySearch() を使用します

于 2012-05-20T09:22:52.043 に答える
0

Array.binarySearch(array, key)メソッドを正しく機能させるには、ソース配列を事前にソートする必要があることに注意してください。ソース配列がソートされていない場合、結果は未定義になります。あなたの質問から、ソース配列はソートされていません。配列を自然な順序でソートするには、util メソッドを使用しますArrays.sort(array)。並べ替え順序を制御する追加のコンパレータを提供することもできますArrays.sort(array, comparator)

例:

// sort in natural order (ascending)
Arrays.sort(oneToSixteen);

// sort descending using comparator
Arrays.sort(oneToSixteen, new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        return o2.compareTo(o1);
    }
});
于 2012-05-21T07:16:55.663 に答える