小说的名称及其分配的整数代码存储在排序数组中,以便每个偶数索引(包括0)包含一个代码,每个奇数索引包含一个标题:
[1,Tom Sawyer,2,Black Beauty,3,Treasure Island]
目前,我已经实现了BinarySearch方法,该方法接收用户输入的代码并输出相应的标题(如果存在)。它起作用,除非用户输入:
2,6或10;但工作 1
public static String binarySearch(String [] bookList, int left, int right, String code)
{
/* bookList - sorted array
* left - leftmost index
* right - rightmost index
* code - item to look for
*/
int middle;
if (left > right) {
return "left>right";
}
middle = (left + right)/2;
/*set middle to nearest even offset (all # are in even position)*/
middle += middle & 1;
if (bookList[middle].equals(code)) {
return bookList[middle + 1];
}
if (code.compareTo(bookList[middle]) < 0) {
return binarySearch(bookList, left, middle - 1, code);
}
return binarySearch(bookList, middle + 2, right, code);
}
可以找到数组的全部内容here
答案 0 :(得分:0)
问题是你的代码是代表数字的字符串。由于您将它们作为字符串进行比较,因此字典顺序为1,10,11,12,...,19,100,2,20,21 ...因此数组未按您的想法排序。
您应该做的是将代码解析为int
-
int bookCode = Integer.parseInt(code);
然后比较 -
if Integer.parseIntbookList[middle] < bookCode
//do something