我试图使用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();
}
答案 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);
您可能正在搜索free
或Free
(带有尾随空格)而非Free
,在这种情况下,它会返回-5。
答案 2 :(得分:1)
如果未找到value且value小于数组中的一个或多个元素,则返回的负数是大于value的第一个元素的索引的按位补码
答案 3 :(得分:0)
那些仍然像我以前一样遇到这种麻烦的人,并且您在想为什么其他任何人都看不到它(Arrays.binarySearch)仍然存在一些问题,因为您已经插入了正确的值并且仍然得到负面结果。 那么这个答案就是针对那些人的:
这是因为您的数组未排序,我的朋友。即使是字符或字符串
对于arrays.binarySearch,应该对数组进行排序(我知道,您必须考虑到我如何错过最重要的事情(是的,发生了))。