首页 新闻 会员 周边 捐助

输出结果不正确???

0
[待解决问题]

String[] array1;
array1 = new String[] { "a", "e", "c", "d", "b" };
System.out.println(Arrays.toString(array1));
System.out.println(array1[1]);
System.out.println(Arrays.binarySearch(array1, "e"));

输出:

[a, e, c, d, b]
e
-6

疑问:e的index为什么是-6而不是1呢。

主人的成长的主页 主人的成长 | 菜鸟二级 | 园豆:210
提问于:2013-11-20 11:41
< >
分享
所有回答(10)
0
今天发现我们的软件有一个Bug,让同事检查,后来,他给我了一段代码,让我看看:
       int[] a = new int[]{128,129};
       int pos = Arrays.binarySearch(a,128);
       System.out.println("Pos="+pos);
       pos =  Arrays.binarySearch(a,129);
       System.out.println("Pos="+pos);
      
       int[] b = new int[]{129,128};
        pos = Arrays.binarySearch(b,128);
       System.out.println("Pos="+pos);
       pos =  Arrays.binarySearch(b,129);
       System.out.println("Pos="+pos);
执行结果为:
Pos=0
Pos=1
Pos=-1
Pos=0
 
呵呵,有点奇怪,查找JDK API(现在有了中文版了,爽),描述如下:
public static int binarySearch(int[] a, int key)
使用二进制搜索算法来搜索指定的 int 型数组,以获得指定的值。必须在进行此调用之前对数组进行排序(通过上面的 sort 方法)。如果没有对数组进行排序,则结果是不明确的。如果数组包含多个带有指定值的元素,则无法保证找到的是哪一个。
原来是需要先进行排序,又长知识了,呵呵。
http://blog.sina.com.cn/s/blog_6da5ef730100mfez.html
大芝麻 | 园豆:4 (初学一级) | 2013-11-20 12:03

是啊,涨知识呢,看来刚学还得看些文档之类的东西。

支持(0) 反对(0) 主人的成长 | 园豆:210 (菜鸟二级) | 2013-11-20 12:28
0

我也涨知识了

angelshelter | 园豆:9914 (大侠五级) | 2013-11-20 12:04
0

binearySearch要先排序的

飞鸟_Asuka | 园豆:393 (菜鸟二级) | 2013-11-20 12:22
0

长知识了

袁家小黑球 | 园豆:1045 (小虾三级) | 2013-11-20 18:22
0

这个确实不错,转走保存下来,以后用。

Vinlan | 园豆:202 (菜鸟二级) | 2013-11-25 17:50
0

mark !

cherrywq | 园豆:206 (菜鸟二级) | 2013-11-28 08:56
0

这个被称为二分法,楼主你可以去看一下源代码,里面两个参数的比较的部分写的是判断大于或者判断小于。
二分法当然是针对有序数组的了。

二分法是什么,请百度。

剑握在手 | 园豆:259 (菜鸟二级) | 2013-11-30 10:57
0

涨知识了!学习了!

bitbug | 园豆:470 (菜鸟二级) | 2013-12-19 17:30
0

binarySearch需要先进行排序

fly1000 | 园豆:408 (菜鸟二级) | 2014-05-06 12:51
0

API是最好的选择

masque | 园豆:210 (菜鸟二级) | 2014-06-26 10:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册