基本二进制搜索有问题

时间:2013-12-05 03:32:38

标签: search binary

那是我的代码:

public static void main(String [] args){
  Scanner input = new Scanner(System.in);
  int number = 12;
  boolean result;


  int [] array = {2,4,6,8,10};
  result = calculateNumber(array, number, array.length-1);

  System.out.println("The result is " + result);
}

public static boolean calculateNumber(int [] array, int number, int max) {
  int min = 0;
  int mid = 0;
  boolean result = false;

  while (min <= max) {
    mid = min + max / 2;

    if (number > array[mid]) {
      min = mid + 1;
    }
    if (number < array[mid]) {
      max = mid - 1;
    }
    else if (number == array[mid]) {
      return result = true;
    }
  }

  return result;

}
}

如您所见,我正在尝试查找数字12是否在数组中。它不是,所以它应该返回“false”,但我收到了这个错误:

java.lang.ArrayIndexOutOfBoundsException: 5

我知道这意味着什么,但我不明白为什么我得到它.. 我已经跟踪了很多次代码,无法找到解决方案.. 当我试图检查数字2,4,6时,它工作得很好。对于任何其他数字,如8,10或更高,它会崩溃。 任何人都可以帮助我吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

看起来很简单。如果您的数组中包含10个元素,则最后一个有效索引为9.

然而,您的代码计算的索引太高了。让我们假设max是10。 然后计算mid为10+(10/2)= 15.(除法优先于加法)

我会改变做一些改变然后再试一次。

  1. 更改终止条件。 while (min <= max)while (min < max)
  2. 明确您的等式,使用括号。 mid = (min+max) / 2