Array.binarySearch返回负数

Bra*_*ley 1 java arrays

我试图使用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();
    }
Run Code Online (Sandbox Code Playgroud)

Bri*_*ach 13

如果它返回负值,则找不到:

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".我非常怀疑你认为案件无关紧要(或有尾随字符;空格或换行符);)


Sid*_*ry 7

那些仍然像我之前一样遇到这个问题的人,你在想为什么其他人看不到它(Arrays.binarySearch)仍然有一些问题,因为你插入了正确的值,你仍然得到否定的结果. 那么这个答案是为那些人准备的:

这是因为你的数组没有排序,我的朋友。即使是字符或字符串

对于arrays.binarySearch,数组应该被排序(我知道,你一定在想我怎么会错过最重要的事情(嗯,是的,发生了))。


Per*_*ror 6

嗯,我刚刚运行你的代码,我得到索引3.

Arrays.sort(names);
int index = Arrays.binarySearch(names, "Free");
System.out.println(index);
Run Code Online (Sandbox Code Playgroud)

您可能正在搜索freeFree(使用尾随空格)而不是Free,在这种情况下它返回-5.