Java 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

小说的名称及其分配的整数代码存储在排序数组中,以便每个偶数索引(包括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);         
    }
    
    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.这不是一个愚蠢的问题。你已经付出了努力,尝试并学到了新的东西。