二进制搜索 - 无法获取信息

时间:2014-06-09 00:25:51

标签: java search binary-search

我有一个问题。我正在学习bout二进制数组并试图找出它。 我试图让它成为用户输入他们的书号,这将搜索它的数组reflist,然后通过booklist打印。

问题是当我输入一个大于1的数字时,比较值永远不会达到0。

     public Boolean binarySearch(String [] A, int left, int right, String V){
     int middle;
     numOfSearches ++;
     if (left > right) {
         return false;
     }

     middle = (left + right)/2;
     int compare = V.compareTo(A[middle]);
     System.out.println("Middle value: "+middle);
     if (compare == 0) {
         binaryOutput.setText("The book is: "+bookList[middle]);
     }
     if (compare < 0) {
         return binarySearch(A, left, (middle-1), V);
     } else {
         return binarySearch(A, middle + 1, right, V);
     }
 }

2 个答案:

答案 0 :(得分:0)

只是一个被遗忘的回归真实。

 if (left > right) {
     return false;
 }
 middle = (left + right)/2;
 int compare = V.compareTo(A[middle]);
 System.out.println("Middle value: "+middle);
 if (compare == 0) {
     binaryOutput.setText("The book is: "+bookList[middle]);
     return true; // Missing!
 }
 if (compare < 0) {
     return binarySearch(A, left, (middle-1), V);
 } else {
     return binarySearch(A, middle + 1, right, V);
 }

compareTo也可能无法正确实施。

答案 1 :(得分:0)

我的猜测是

  1. 您要查找的图书编号不在数组中,或
  2. 书号的格式是这样的,它的字符串表示的排序顺序不同于整数表示。
  3. 对于第二种情况,让我举个例子。假设您有三本书,其编号为1,2和10.如果我们使用其整数表示来订购这些图书编号,我们会得到1,2,然后是2.但是,如果我们使用其字符串表示来订购这些图书编号(字母顺序),我们得到1,10和2.显然,使用二进制搜索不适用于后一种情况。