在java中使用字符串二进制搜索有困难-在列表中找不到搜索键

在java中使用字符串二进制搜索有困难-在列表中找不到搜索键,java,string,search,binary,full-text-search,Java,String,Search,Binary,Full Text Search,我一直在尝试使用searck键在这个二进制搜索程序中获取一个值。如果我将“CCC”作为元素之一,并尝试使用搜索参数搜索它,它将成功获取,但当我从元素列表中删除“CCC”并将搜索键更改为任何其他元素时,它不会获取任何结果 static String[] books = { "Rome", "King Arthur", "The Johnson's", "Romeo and Juliet", &q

我一直在尝试使用searck键在这个二进制搜索程序中获取一个值。如果我将“CCC”作为元素之一,并尝试使用搜索参数搜索它,它将成功获取,但当我从元素列表中删除“CCC”并将搜索键更改为任何其他元素时,它不会获取任何结果

static String[] books = {
            "Rome", "King Arthur", "The Johnson's", "Romeo and Juliet", "Hoodlums", "Baptist",
            "Rogue", "Marc Anthony", "The survivor", "Arc of Grace", "France", "Holy",
            "Mayor", "Fatality", "Immortal", "Fidelity", "The Major", "In the Hood"
    };
    static int min = 0;
    static int max = books.length - 1;
    static int mid;
    static String key = "Rome";

    public static int stringBinarySearch() {
        while (min <= max) {
            mid = (min + max) / 2;
            if (books[mid].compareTo(key) < 0) {
                min = mid + 1;
            }
            else if (books[mid].compareTo(key) > 0) {
                max = mid - 1;
            } else {
                System.out.print("Book found and available at shelve ");
                return mid;
            }
        }
        System.out.println("Book not found");
        return -1;
    }

    public static void main(String[] args) {
        System.out.println(stringBinarySearch());
    }
静态字符串[]书籍={
“罗马”、“亚瑟王”、“约翰逊家”、“罗密欧与朱丽叶”、“流氓”、“浸信会”,
“流氓”、“马克·安东尼”、“幸存者”、“恩典之弧”、“法国”、“神圣”,
“市长”、“宿命”、“不朽”、“忠诚”、“少校”、“风帽中”
};
静态int min=0;
静态int max=books.length-1;
静态int-mid;
静态字符串key=“罗马”;
公共静态int-stringBinarySearch(){
而(最小0){
max=mid-1;
}否则{
系统输出打印(“在书架上找到并提供的书”);
中途返回;
}
}
System.out.println(“找不到书”);
返回-1;
}
公共静态void main(字符串[]args){
System.out.println(stringBinarySearch());
}

为了能够使用二进制搜索算法,必须按搜索条件对数据集进行排序


在本例中,您将按
书籍的字符串进行比较,然后必须首先按a-z顺序对
书籍进行排序。

二进制搜索要求对数组进行排序

由于数组没有排序,因此最好进行线性搜索,或者如果要经常搜索,请对数组进行排序(使用
Arrays.sort(books)
),然后使用二进制搜索方法