我正在尝试使用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();
}发布于 2012-12-06 07:56:17
嗯,我刚刚运行了你的代码,我得到了索引3。
Arrays.sort(names);
int index = Arrays.binarySearch(names, "Free");
System.out.println(index);您可能正在搜索free或Free(带有尾随空格),而不是Free,在这种情况下,它将返回-5。
发布于 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"。我高度怀疑您认为大小写无关紧要(或有尾随字符;空格或换行符) ;)
发布于 2018-12-19 02:19:12
那些仍然像我之前遇到的麻烦的人,你会想,为什么其他人看不到它(Arrays.binarySearch)仍然有一些问题,因为你已经插入了正确的值,但你仍然得到了负面的结果。好的,这个答案是针对那些人的:
是因为你的数组没有排序,我的朋友。即使是字符或字符串的
对于arrays.binarySearch,应该对数组进行排序(我知道,您一定在想我是如何遗漏了最重要的东西(嗯,是的,确实如此)。
https://stackoverflow.com/questions/13734694
复制相似问题