3

Arrays.binarySearch()メソッドを使用して文字列配列内の文字列のインデックスを見つけようとしていますが、文字列「Free」を検索すると、メソッドは位置整数「-5」を返すようです。なぜこれになるのか、何か考えはありますか?

String[] names = {"Arken","Ben","Darklark", "Free","group"};

void changeFriends(String uname, boolean b)
        {   // change a friend's "online" status

    Arrays.sort(names);
    int index = Arrays.binarySearch(names, uname);

    System.out.println("NAME OF ONLINE USER IS AT INDEX:" + index + "Name:" + uname);
        if(index > -1)
        {

             if(b == true)
            {
                loggedOn[index] = true;
            }
            else
            {
                loggedOn[index] = false;
            }
        }
        // call method to update buttons
        changeNameButtons();
    }
4

4 に答える 4

14

負の値を返している場合は見つかりません:

http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html

public static int binarySearch(Object [] a、
                               Object key)

戻り値:検索キーのインデックス(配列に含まれている場合)。それ以外の場合(-(挿入点)-1)。挿入ポイントは、キーが配列に挿入されるポイントとして定義されます。キーより大きい最初の要素のインデックス、または配列内のすべての要素が指定されたキーより小さい場合はa.lengthです。これにより、キーが見つかった場合にのみ、戻り値が0以上になることが保証されることに注意してください。

あなたが通過しているものは何でもそうでunameはありません"Free"。私はあなたがケースが問題ではないと考えていることを強く疑っています(または末尾の文字があります;空白または改行);)

于 2012-12-05T23:57:15.870 に答える
7

以前のようにまだこの問題を抱えている人は、正しい値を挿入しても否定的な結果が得られるため、なぜit(Arrays.binarySearch)にまだ問題があるのか​​誰にもわからないのではないかと考えています。 。さて、この答えはそれらのためです:

友達、あなたの配列がソートされていないからです。文字や文字列であっても

array.binarySearchの場合、配列を並べ替える必要があります(私が知っているのは、どのようにして最も重要なことを見逃したのかを考えている必要があります(ええ、そうなります))。

于 2018-12-18T18:19:11.867 に答える
6

うーん、私はあなたのコードを実行し、インデックス3を取得しました。

Arrays.sort(names);
int index = Arrays.binarySearch(names, "Free");
System.out.println(index);

freeおそらく、またはFree(末尾に空白を含む)の代わりに検索している可能性がFreeあります。この場合、-5が返されます。

于 2012-12-05T23:56:16.613 に答える
1

値が見つからず、値が配列内の1つ以上の要素よりも小さい場合、返される負の数は、値よりも大きい最初の要素のインデックスのビット単位の補数です。

于 2020-08-25T01:29:26.900 に答える