binarySearch方法生成“ArrayIndexOutOfBounds”例外 [英] binarySearch Method producing "ArrayIndexOutOfBounds" Exception

查看:198
本文介绍了binarySearch方法生成“ArrayIndexOutOfBounds”例外的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道为什么这个方法给我一个 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
返回数组[mid];

// i ++;
}
返回-1;
}
}


解决方案

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



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

您的实际上应该是: -

  int high = array.length  -  1; 


I would like to know why this method is giving me an ArrayIndexOutOfBounds exception when I provide a key that is a letter not in my array. It seems to have no problem returning a value if the key is anything other than a letter.

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";
    }
}

解决方案

In your binarySearch method, you have initialized your high to: -

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

Your high should actually be: -

int high = array.length - 1;

这篇关于binarySearch方法生成“ArrayIndexOutOfBounds”例外的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆