我有一个问题。我正在学习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);
}
}
答案 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和10.如果我们使用其整数表示来订购这些图书编号,我们会得到1,2,然后是2.但是,如果我们使用其字符串表示来订购这些图书编号(字母顺序),我们得到1,10和2.显然,使用二进制搜索不适用于后一种情况。