Java Array.binarySearch返回负数

Java Array.binarySearch返回负数,java,arrays,Java,Arrays,我试图使用Arrays.binarySearch()方法在字符串数组中查找字符串的索引,但是在查找字符串“Free”时,该方法似乎返回了position整数“-5”。知道为什么会这样吗 String[] names = {"Arken","Ben","Darklark", "Free","group"}; void changeFriends(String uname, boolean b) { // change a friend's "online" status

我试图使用Arrays.binarySearch()方法在字符串数组中查找字符串的索引,但是在查找字符串“Free”时,该方法似乎返回了position整数“-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();
    }

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

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

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

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

公共静态int二进制搜索(对象[]a,
对象键)

返回:搜索键的索引(如果它包含在数组中); 否则,((插入点)-1)。插入点定义为 将键插入数组的点:索引 第一个元素的长度大于键,如果所有元素 数组中的值小于指定的键。请注意 保证当且仅当 找到了


无论您以
uname
的形式传递什么,都不是
“免费的”
。我高度怀疑您认为大小写无关紧要(或者有尾随字符;空格或换行符);)

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

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


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

如果找不到值并且值小于数组中的一个或多个元素,返回的负数是大于value的第一个元素的索引的位补码

我测试了你的代码,它返回的是
在线用户的名字在索引处:3 NAME:Free
@MadProgrammer哈哈,我不是在粗鲁,无论如何改变了它:)我不认为你在哪里,但不是每个人都会这么看;)@我在任何编辑中都没有看到“苛刻”的评论。你在说什么?@EJP-这只是我的观点,只是感觉有点“不经意间”。记住,沟通的意义是接受者对沟通的理解;)当搜索下划线字符时,我有array.binarySearch返回-10,在debbuger plain sight中执行。难以置信,但却是真的!您应该发布代码和问题,而不仅仅是发布问题。