在Java中,为什么在使用二进制搜索搜索数组时会返回负数?

Syn*_*nia 3 java arrays sorting binary search

我是Java的初学者,正在学习使用数组.据我所知,当使用Array的二进制搜索方法时,如果找不到该条目,它将返回一个负数.但是,在下面的代码中,我得到了一个9,10和11的负数.

我想知道是否有人可以帮助指出我做错了什么?谢谢!

   String [] oneToSixteen = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16"};

   System.out.println("Searching for 7: "+ Arrays.binarySearch(oneToSixteen, "7"));
   System.out.println("Searching for 8: "+ Arrays.binarySearch(oneToSixteen, "8"));
   System.out.println("Searching for 9: "+ Arrays.binarySearch(oneToSixteen, "9"));
   System.out.println("Searching for 10: "+ Arrays.binarySearch(oneToSixteen, "10"));
   System.out.println("Searching for 11: "+ Arrays.binarySearch(oneToSixteen, "11"));
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

Searching for 7: 6
Searching for 8: 7
Searching for 9: -17
Searching for 10: -2
Searching for 11: -2
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激.

cod*_*ict 9

这是因为你的阵列是一个数组String,而不是int它没有排序.

文档明确指出必须对要搜索的数组进行排序,如果不是,则结果未定义.

要对数组进行排序,可以使用Arrays类的sort方法.

  • @GregKopff:我怀疑重点是他们没有排序*因为*他们是字符串(根据字典顺序进行比较); 与整数*相同的值*显然已经适当地排序. (3认同)
  • "未排序"的观点是公平的 - 但是你对*数组类型*的评论是什么原因?他在`String`搜索,`String`是'Comparable`. (2认同)
  • @GregKopff:如果它是一个`int`数组,那么1,2,3,4,... 12被隐式排序.. nto为`String`.对于String,已排序使用ascii值. (2认同)