已有101人关注
binarySearch()方法进行数组查询时遇到的问题
发表在Java图书答疑 2019-08-08 《Java从入门到精通(第4版)》第6章 数组 113页-114页
是否精华
版块置顶:

int arr[]=new int[]{4,25,10};

    Arrays.sort(arr);

    int index=Arrays.binarySearch(arr,8);

    System.out.println(index);

   为什么index的值是-2?我认为应该是-1,因为排序过后4,10,25,书上说插入点是搜索键要插入数组的那一点,即第一个大于此键的元素索引,这里第一个大于8的元素应该是10,10的索引为1,所以我认为是-1。(“-”插入点)


    int arr[]=new int[]{4,25,10};

    Arrays.sort(arr);

int index=Arrays.binarySearch(arr,30);

System.out.println(index);

   为什么index的值是-4?我认为应该是-3,因为书上说数组中所有元素都小于指定的键,则为arr.length,这里的arr.length=3,所以index的值我认为是-3。


分享到:
精彩评论 7
18324139407
学分:28 LV2
2019-08-08
沙发

这是java从入门到精通(第5版)113页的内容,烦请各位大神回复一下,万分感谢!

mjh
学分:158 LV4
2019-08-08
板凳
你搜索的值30在数组排序后25的后面则30的length为4
又因为要搜索的值不存在则返回“-”所以输出的值为-4
18324139407
学分:28 LV2
2019-08-10
地板

mjh 发表于2019-08-08 16:13

你搜索的值30在数组排序后25的后面则30的length为4
又因为要搜索的值不存在则返回“-”所以输出的值为-4

int arr[]=new int[]{4,25,10};

    Arrays.sort(arr);

    int index=Arrays.binarySearch(arr,8);

    System.out.println(index);

   为什么index的值是-2?书上说“8”应该在“25”之前,我认为排序后“8”应该在“10”之前啊???

    按照你的说法是排序后,数组是4,10,25,然后搜索8,8应该在10之前,排成4,8,10,25,这里8又不存在,应该为-1啊。出了什么问题?


mjh
学分:158 LV4
2019-08-10
4L
返回的是length(长度)不是index(索引)
mjh
学分:158 LV4
2019-08-10
5L
8的length是2,不存在则返回- 所以为-2
18324139407
学分:28 LV2
2019-08-11
6L

mjh 发表于2019-08-10 18:41

8的length是2,不存在则返回- 所以为-2

你看书上返回的是索引值,Java从入门到精通(第五版)114页有个例题【6.18】,排序后就返回的是索引值,你说的返回length,应该是数组中的所有元素都小于指定的键,则返回length

根号申
学分:4736 LV12
TA的每日心情
2021-07-16 23:48:46
2019-08-12
7L

image.png

书中的描述写的不好,不容易理解,你直接看JDK的源码就明白了

首页上一页 1 下一页尾页 7 条记录 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经营性网站备案信息 营业执照