2012-05-08 10 views
3

私はJavaの初心者であり、配列を使うことを学んでいます。 Arrayのバイナリ検索メソッドを使用する場合、エントリが見つからない場合は負の数が返されることを理解しています。しかし、次のコードでは、9,10、および11の間、負の数値が返されています。Javaでは、バイナリ検索で配列を検索するとき、なぜこれが負の数を返しますか?

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

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 

すべてのヘルプははるかに高く評価されるだろう。あなたの配列は、それがにソートされていないStringなくintの配列であるため、

+1

ストリングアレイは(binarySearchの戻り値が不定である場合に)ソートされていません。 – Corbin

答えて

9

です。

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

配列をソートするには、配列クラスsort methodを使用します。

+0

どのようにそれを並べ替えるには? – 11684

+2

「ソートされていない」ポイントは公平ですが、*配列タイプ*についてのコメントの理由は何ですか?彼は 'String'で検索し、' String'は 'Comparable'です。 –

+0

@ 11684:Arrays.sortはトリックを行います...もちろん、すべての結果が変更されます。 –

0

ネガは、文字列が配列内で見つけられ/挿入されるコンポーネント-1を指し、配列がソートされていないために表示されます。要素が見つかりません。あなたのアレイ 「9」が「10」、「11」がアレイの1つの

タイプないコンポーネントに挿入される成分1 に挿入されるコンポーネント16 に挿入されることが-17であるためそう Arraysメソッドがオーバーロードされているためです。

Arrays.sort(oneToSixteen); 

を使用した

ソートは、(あなたのbinarySearchを使用)

0

正しくソース配列は前ソートする必要がありArray.binarySearch(array, key)方法を機能させるためにことを覚えておいてください。ソース配列がソートされていない場合、結果は未定義となります。あなたの質問から、ソース配列はソートされません。自然順序で配列をソートするには、utilメソッドを使用します。追加のコンパレータを用意して、ソート順を制御することもできます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); 
    } 
}); 
関連する問題