Java Array.binarySearch返回负数
我试图使用Arrays.binarySearch()方法在字符串数组中查找字符串的索引,但是在查找字符串“Free”时,该方法似乎返回了position整数“-5”。知道为什么会这样吗Java Array.binarySearch返回负数,java,arrays,Java,Arrays,我试图使用Arrays.binarySearch()方法在字符串数组中查找字符串的索引,但是在查找字符串“Free”时,该方法似乎返回了position整数“-5”。知道为什么会这样吗 String[] names = {"Arken","Ben","Darklark", "Free","group"}; void changeFriends(String uname, boolean b) { // change a friend's "online" status
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();
}
嗯,我刚刚运行了你的代码,得到了索引3
Arrays.sort(names);
int index = Arrays.binarySearch(names, "Free");
System.out.println(index);
您可能正在搜索
free
或free
(带有尾随空格)而不是free
,在这种情况下,它返回-5。如果它返回负值,则找不到:
公共静态int二进制搜索(对象[]a,对象键)
返回:搜索键的索引(如果它包含在数组中); 否则,((插入点)-1)。插入点定义为 将键插入数组的点:索引 第一个元素的长度大于键,如果所有元素 数组中的值小于指定的键。请注意 保证当且仅当 找到了
无论您以
uname
的形式传递什么,都不是“免费的”
。我高度怀疑您认为大小写无关紧要(或者有尾随字符;空格或换行符);) 那些像我之前遇到的问题一样仍然存在的人,你在想为什么其他人看不到它(Arrays.binarySearch)仍然存在一些问题,因为你插入了正确的值,但仍然得到了否定的结果。
这个答案是针对那些:
这是因为你的数组没有排序,我的朋友。即使是字符或字符串
对于arrays.binarySearch,数组应该被排序(我知道,你一定在想我是怎么错过了最重要的事情的(是的,确实如此))。如果找不到值并且值小于数组中的一个或多个元素,返回的负数是大于value的第一个元素的索引的位补码我测试了你的代码,它返回的是
在线用户的名字在索引处:3 NAME:Free
@MadProgrammer哈哈,我不是在粗鲁,无论如何改变了它:)我不认为你在哪里,但不是每个人都会这么看;)@我在任何编辑中都没有看到“苛刻”的评论。你在说什么?@EJP-这只是我的观点,只是感觉有点“不经意间”。记住,沟通的意义是接受者对沟通的理解;)当搜索下划线字符时,我有array.binarySearch返回-10,在debbuger plain sight中执行。难以置信,但却是真的!您应该发布代码和问题,而不仅仅是发布问题。