BinarySearch无法在String []

时间:2016-05-23 17:59:28

标签: java arrays binary-search

小说的名称及其分配的整数代码存储在排序数组中,以便每个偶数索引(包括0)包含一个代码,每个奇数索引包含一个标题:

  

[1,Tom Sawyer,2,Black Beauty,3,Treasure Island]

目前,我已经实现了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

1 个答案:

答案 0 :(得分:0)

问题是你的代码是代表数字的字符串。由于您将它们作为字符串进行比较,因此字典顺序为1,10,11,12,...,19,100,2,20,21 ...因此数组未按您的想法排序。
您应该做的是将代码解析为int -

int bookCode = Integer.parseInt(code);

然后比较 -

if Integer.parseIntbookList[middle] < bookCode
//do something