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

那些仍然像我之前遇到这个问题的人,你在想为什么其他人看不到它(Arrays.binarySearch)仍然有一些问题,因为你插入了正确的值并且你仍然得到负面结果. 好吧,这个答案适用于那些:

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

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

于 2018-12-18T18:19:11.867 回答
6

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

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

您可能正在搜索freeor Free(带有尾随空格)而不是Free,在这种情况下它返回 -5。

于 2012-12-05T23:56:16.613 回答
1

如果未找到 value 且 value 小于 array 中的一个或多个元素,则返回的负数是大于 value 的第一个元素的索引的按位补码

于 2020-08-25T01:29:26.900 回答