如何更正数组中的二进制搜索代码

时间:2016-11-16 22:58:40

标签: java

我在java中的数组中实现了二进制搜索的代码 这是我的代码:

public class Exam {

    public static boolean find(int[]a, int k){

        int mid = a.length/2;
        if (a[mid]==k) {
            return true;
        }
        else if (a[mid] < k) {
            for (int i=0; i<a[mid]; i++) {
                if (a[i]==k) {
                    return true;
                } 
        }

        } else {
            for (int ii=mid; ii<a[a.length]; ii++) {
                if (a[ii]==k) {
                    return true;
                }
        }
    }
        return false;

    }

    public static void main(String[] args) {

        int[] a = { 2, 3, 4, 9, 11, 15 };

        System.out.println(find(a,3));

    }

}

当我运行它时,我收到错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
    at shapes.Exam.find(Exam.java:20)
    at shapes.Exam.main(Exam.java:34)

但是当我改为运行此行时:

System.out.println(find(a,15));

我得到正确的输出如下:

true

我的代码出了什么问题?

1 个答案:

答案 0 :(得分:-1)

下面:

 for (int ii=mid; ii<a[a.length]; ii++) {

对于数组的最后一个元素,它应该是a[a.length-1]