Java BinarySearch无法在字符串[]中找到特定元素
小说的名称及其分配的整数代码存储在排序数组中,以便每个偶数索引(包括0)包含一个代码,每个奇数索引包含一个标题: [1,汤姆·索耶,2,黑美人,3,金银岛] 目前,我已经实现了一个BinarySearch方法,它接受用户输入的代码并输出相应的标题(如果存在)。除非用户输入:Java BinarySearch无法在字符串[]中找到特定元素,java,arrays,binary-search,Java,Arrays,Binary Search,小说的名称及其分配的整数代码存储在排序数组中,以便每个偶数索引(包括0)包含一个代码,每个奇数索引包含一个标题: [1,汤姆·索耶,2,黑美人,3,金银岛] 目前,我已经实现了一个BinarySearch方法,它接受用户输入的代码并输出相应的标题(如果存在)。除非用户输入: 100(数组中的最后一个代码) 2、6或10;但是对1有效 public static String binarySearch(String [] bookList, int left, int right, String
- 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); }
publicstaticstringbinarysearch(String[]bookList,int left,int right,stringcode) { /*书目-排序数组 *最左索引 *右-最右索引 *代码-要查找的项目 */ 中间; 如果(左>右){ 返回“左>右”; } 中间=(左+右)/2; /*将中间偏移设置为最近的偶数偏移(所有#均处于偶数位置)*/ 中间+=中间&1; if(图书列表[中间].equals(代码)){ 返回书目[中间+1]; } if(代码比较(书目[中间])小于0){ 返回二进制搜索(图书列表,左侧,中间-1,代码); } 返回二进制搜索(图书列表,中间+2,右,代码); }
数组的全部内容都可以找到问题在于您的代码是表示数字的字符串。因为您将它们作为字符串进行比较,所以字典顺序是1、10、11、12、…、19、100、2、20、21。。。因此,数组没有按您可能认为的那样排序。
您应该做的是将代码解析为
int
-
int bookCode = Integer.parseInt(code);
然后比较-
if Integer.parseIntbookList[middle] < bookCode
//do something
if Integer.parseIntbookList[中间]
为什么将代码
(这是一个数字)与字符串
进行比较?如果比较“2”和“11”,会发生什么?将其转换为int,然后进行比较。数字作为字符串的字典顺序为-1,10,11,12,…,19,100,2,20,21。。。因此,如果您将代码视为字符串,则数组不会排序。@TDG我很乐意接受您的评论,作为对我这个愚蠢问题的回答。1。在你接受之前先测试一下。2.这不是一个愚蠢的问题。你已经付出了努力,尝试并学到了新的东西。