Java 使用递归二进制搜索进行拼写检查

Java 使用递归二进制搜索进行拼写检查,java,recursion,binary-search-tree,Java,Recursion,Binary Search Tree,我有一个递归的二进制搜索拼写检查方法。萨雷在《英格兰词典》中有一个词表。关键字是您可以发送的任何单词。该方法将获取任何wordkey,并使用递归二进制搜索在字典sArray中查找它 我想不出如何正确地浏览字典中的每一个单词。可以找到诸如project和test之类的词,但是找不到诸如the和by之类的词。我知道这与我的递归步骤有关,但是我无法根据比较找出正确的递归步骤 public int bSearch(ArrayList<String> sArray, String key, i

我有一个递归的二进制搜索拼写检查方法。萨雷在《英格兰词典》中有一个词表。关键字是您可以发送的任何单词。该方法将获取任何wordkey,并使用递归二进制搜索在字典sArray中查找它

我想不出如何正确地浏览字典中的每一个单词。可以找到诸如project和test之类的词,但是找不到诸如the和by之类的词。我知道这与我的递归步骤有关,但是我无法根据比较找出正确的递归步骤

public int bSearch(ArrayList<String> sArray, String key, int lowIndex, int highIndex) {

    if (lowIndex > highIndex) {
        System.out.println("The word was not found ");


        return -1;
    }

    mid = (lowIndex + highIndex) / 2;

    if (sArray.get(mid).equalsIgnoreCase(key)) {
        System.out.println("WORD FOUND");

        return mid;
    } else if (sArray.get(mid).compareTo(key) > 0) {

        return bSearch(sArray, key, lowIndex, mid - 1);

    } else {

        return bSearch(sArray, key, mid + 1, highIndex);
    }

您确定“the”在ArrayList中吗?仅供参考,您可以查看内置的Arrays.binarySearch。教科书中的错误是数组需要排序。另外,您使用的是equalsIgnoreCase,但不是CompareTognoreCase,需要对“忽略的大小写”进行排序。如果没有进一步的信息,我的第一个猜测是您的ArrayList排序不正确。你能提供一个更详细的例子吗?编辑:看起来Dan比我快。ArrayList是按字母顺序排序的,你认为我在递归调用中没有加/减mid吗?