Array.binarySearch返回负数

时间:2012-12-05 23:51:24

标签: 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();
    }

4 个答案:

答案 0 :(得分:12)

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

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

  

public static int binarySearch(Object [] a,
  对象键)

     

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

无论你传递的是什么uname都不是"Free"。我非常怀疑你认为案件无关紧要(或有尾随字符;空格或换行符);)

答案 1 :(得分:6)

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

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

那些仍然像我以前一样遇到这种麻烦的人,并且您在想为什么其他任何人都看不到它(Arrays.binarySearch)仍然存在一些问题,因为您已经插入了正确的值并且仍然得到负面结果。 那么这个答案就是针对那些人的:

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

对于arrays.binarySearch,应该对数组进行排序(我知道,您必须考虑到我如何错过最重要的事情(是的,发生了))。