java - binarySearch 方法产生 "ArrayIndexOutOfBounds"异常

标签 java exception methods binary-search indexoutofboundsexception

我想知道为什么当我提供的键不是我的数组中的字母时,此方法会给出 ArrayIndexOutOfBounds 异常。如果键不是字母,那么返回值似乎没有问题。

public class BinarySearch2 {

    public static void main(String[] args) {
        String[] array = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J"};
        String key = "K";
        String found = binarySearch(array, key);
        System.out.println(found);
    }

    public static String binarySearch(String[] array, String key) {
        int low = 0;
        int high = array.length;
        int mid = (low + high)/2;
        //int i = 0;

        while (low <= high) {
            //System.out.print(i + " ");
            if (array[mid].compareTo(key) < 0) {
                System.out.println(array[mid].compareTo(key));
                low = mid + 1;
                mid = (low + high)/2;
            }
            else if (array[mid].compareTo(key) > 0) {
                high = mid - 1;
                mid = (low + high)/2;
            }
            else
                return array[mid];

            //i++;
        }
        return "-1";
    }
}

最佳答案

在您的 binarySearch 方法中,您已将 high 初始化为: -

int low = 0;
int high = array.length;
int mid = (low + high)/2;

您的最高实际上应该是:-

int high = array.length - 1;

关于java - binarySearch 方法产生 "ArrayIndexOutOfBounds"异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12826864/

相关文章:

java - 如何从循环外部获取每个循环的长计数值

java - 检查字符串是否符合正则表达式要求

datetime - 在 C# 中处理 TimeSpan 异常

python - python中的异常传播

php - 如何处理PHP 5.4中的方法引发的异常?

inheritance - CLOS:如何调用一个不太具体的方法?

java - Install4j:将 AbstractInstallAction 类扩展为另一个抽象类并实现它

java - 匿名类上的 NotSerializableException

java - # 在 Java 方法中起什么作用?

javascript - 为什么这个 Javascript 方法不会继续调用自己?