Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 二进制搜索-获取信息时遇到问题_Java_Search_Binary Search - Fatal编程技术网

Java 二进制搜索-获取信息时遇到问题

Java 二进制搜索-获取信息时遇到问题,java,search,binary-search,Java,Search,Binary Search,我有个问题。我正在学习二进制数组,并试图找出它。 我正在尝试这样做,用户将输入他们的书号,这将通过数组reflist搜索它,然后通过booklist打印它 问题是,当我输入一个大于1的数字时,比较值永远不会达到0 public Boolean binarySearch(String [] A, int left, int right, String V){ int middle; numOfSearches ++; if (left > right)

我有个问题。我正在学习二进制数组,并试图找出它。 我正在尝试这样做,用户将输入他们的书号,这将通过数组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);
     }
 }
public Boolean二进制搜索(字符串[]A,int left,int right,字符串V){
中间;
NUMOF++;
如果(左>右){
返回false;
}
中间=(左+右)/2;
int compare=V.compareTo(A[中间]);
System.out.println(“中间值:+Middle”);
如果(比较==0){
setText(“书是:“+bookList[middle]);
}
如果(比较<0){
返回二进制搜索(A,左,(中-1),V);
}否则{
返回二进制搜索(A,中间+1,右,V);
}
}

只是忘记了返回true

 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);
 }
if(左>右){
返回false;
}
中间=(左+右)/2;
int compare=V.compareTo(A[中间]);
System.out.println(“中间值:+Middle”);
如果(比较==0){
setText(“书是:“+bookList[middle]);
返回true;//缺少!
}
如果(比较<0){
返回二进制搜索(A,左,(中-1),V);
}否则{
返回二进制搜索(A,中间+1,右,V);
}

另外,
compareTo
可能实现不正确。

我猜也是这样

  • 您要查找的书号不在数组中,或者
  • 书号的格式是这样的:它的字符串表示形式与整数表示形式具有不同的顺序
  • 关于第二种情况,让我举个例子。假设您有三本书,其编号分别为1、2和10。如果我们使用整数表示对这些书号进行排序,我们得到1,2,然后是2。但是,如果我们使用字符串表示法(字母顺序)对这些书号进行排序,我们得到1、10和2。显然,在后一种情况下,使用二进制搜索将不起作用。

    标记如何应用?为什么不
    Collections.binarySearch()
    ?如果没有失败的测试用例,您如何调试它?