已有101人关注
关于数组查询。
发表在Java图书答疑 2009-08-12
是否精华
版块置顶:
import java.util.Arrays;

public class Getifelse {

public static void main(String[] args) { //主方法
int arr[] = new int[]{1,2,3,5,8,34,67,90};
Arrays.sort(arr);
int index =Arrays.binarySearch(arr,0,5,70);
System.out.println(index);
}
}

对于这段代码。
我要从0-5这个位置搜索在数组中不存在并且比里面的数都大的70,
按书本105页的说法,“如果范围中的所有元素都小于指定的键,则输出toIndex.那么不是应该输出-5吗?
但是程序运行后却输出了-6.为什么会这样子。

同理,
当我把搜索变为int index =Arrays.binarySearch(arr,0,5,4);时,
按书中的说法,回返回插入点,即arr[]中“5”的索引,为-3,但是却输出了-4.为什么会这样子?
分享到:
精彩评论 3
绿草_mrkj
学分:0 LV1
2009-08-12
沙发
  解决这个问题,请详细阅读Java从入门到精通第105页上面一段文字。书中已经明确给出“插入点被定义为将键插入数组的那一点,即范围中第一个大于此键的元素索引。”你说的情况必须保证当且仅当此键被找时,你要找的70没有包含在你的数组中。
foreverxjy
学分:0 LV1
2009-08-12
板凳
[FIELDSET][LEGEND]引自:1楼[/LEGEND]
  解决这个问题,请详细阅读Java从入门到精通第105页上面一段文字。书中已经明确给出“插入点被定义为将键插入数组的那一点,即范围中第一个大于此键的元素索引。”你说的情况必须保证当且仅当此键被找时,你要找的70没有包含在你的数组中。
[/FIELDSET]

回复:
  
还是不太明白。
如果我把那70换成里面有的90,输出的是-6,为什么不是输出toIndex的-5?
绿草_mrkj
学分:0 LV1
2009-08-12
地板
   可以查阅JDK文档帮助你理解,文档中对这个方法是这样解释的,如果查询的范围内不包含要查的元素,则返回-(插入点)-1。因为你要查询的索引位置在0至5范围内,这里面不包含有70,因此返回-插入点,也就是-5,-5减1表示-6,因此返回-6。这种应用方式在实际开发中应用不多,希望小的挫折不会让你对Java失去信心。
首页上一页 1 下一页尾页 3 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照