我试图使用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();
}
Run Code Online (Sandbox Code Playgroud)
Bri*_*ach 13
如果它返回负值,则找不到:
http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html
public static int binarySearch(Object [] a,
Object key)返回:搜索键的索引(如果它包含在数组中); 否则,( - (插入点) - 1).插入点定义为键将插入到数组中的点:第一个元素的索引大于键,或者如果数组中的所有元素都小于指定键,则为a.length.请注意,当且仅当找到密钥时,这可以保证返回值> = 0.
无论你传入的uname是什么,都不是"Free".我非常怀疑你认为案件无关紧要(或有尾随字符;空格或换行符);)
Sid*_*ry 7
那些仍然像我之前一样遇到这个问题的人,你在想为什么其他人看不到它(Arrays.binarySearch)仍然有一些问题,因为你插入了正确的值,你仍然得到否定的结果. 那么这个答案是为那些人准备的:
这是因为你的数组没有排序,我的朋友。即使是字符或字符串
对于arrays.binarySearch,数组应该被排序(我知道,你一定在想我怎么会错过最重要的事情(嗯,是的,发生了))。
嗯,我刚刚运行你的代码,我得到索引3.
Arrays.sort(names);
int index = Arrays.binarySearch(names, "Free");
System.out.println(index);
Run Code Online (Sandbox Code Playgroud)
您可能正在搜索free或Free(使用尾随空格)而不是Free,在这种情况下它返回-5.