首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回负数的Array.binarySearch

返回负数的Array.binarySearch
EN

Stack Overflow用户
提问于 2012-12-06 07:51:24
回答 4查看 17.6K关注 0票数 3

我正在尝试使用Arrays.binarySearch()方法在字符串数组中查找字符串的索引,但是在查找字符串"Free“时,该方法似乎返回位置整数"-5”。你知道为什么会这样吗?

代码语言:javascript
复制
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();
    }
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-12-06 07:56:17

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

代码语言:javascript
复制
Arrays.sort(names);
int index = Arrays.binarySearch(names, "Free");
System.out.println(index);

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

票数 6
EN

Stack Overflow用户

发布于 2012-12-06 07:57:16

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

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

公共静态集成binarySearch(Object[] a,

*对象键)返回:如果数组中包含搜索键的索引,则返回;否则为(-(插入点)- 1)。插入点被定义为将键插入到数组中的点:第一个元素的索引大于键,如果数组中的所有元素都小于指定的键,则为a.length。请注意,这保证了当且仅当找到该键时,返回值才为>= 0。

无论您作为uname传入的是什么,都不是"Free"。我高度怀疑您认为大小写无关紧要(或有尾随字符;空格或换行符) ;)

票数 14
EN

Stack Overflow用户

发布于 2018-12-19 02:19:12

那些仍然像我之前遇到的麻烦的人,你会想,为什么其他人看不到它(Arrays.binarySearch)仍然有一些问题,因为你已经插入了正确的值,但你仍然得到了负面的结果。好的,这个答案是针对那些人的:

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

对于arrays.binarySearch,应该对数组进行排序(我知道,您一定在想我是如何遗漏了最重要的东西(嗯,是的,确实如此)。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13734694

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档