【发布时间】:2016-05-23 17:59:28
【问题描述】:
小说的名称及其分配的整数代码存储在排序数组中,因此每个偶数索引(包括 0)包含一个代码,每个奇数索引包含一个标题:
[1、汤姆索亚、2、黑美人、3、金银岛]
目前,我已经实现了一个 BinarySearch 方法,该方法接受用户输入的代码并输出相应的标题(如果存在)。它可以工作,除非用户输入:
- 100(数组中的最后一个代码)
-
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
【问题讨论】:
-
您为什么将
code(这是一个数字)与String进行比较?如果比较“2”和“11”会发生什么?将其转换为int,然后进行比较。 -
数字作为字符串的字典顺序是 - 1,10,11,12, ..., 19, 100, 2, 20, 21... 所以如果您将代码视为字符串,数组未排序。
-
@TDG 我很乐意接受您的评论作为对我不明智问题的回答。
-
1.在你接受它之前测试它。 2. 这不是不明智的问题。您已经付出了努力,尝试并学到了新事物。
标签: java arrays binary-search