那是我的代码:
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或更高,它会崩溃。 任何人都可以帮助我吗?
谢谢!
答案 0 :(得分:0)
看起来很简单。如果您的数组中包含10个元素,则最后一个有效索引为9.
然而,您的代码计算的索引太高了。让我们假设max是10。 然后计算mid为10+(10/2)= 15.(除法优先于加法)
我会改变做一些改变然后再试一次。
while (min <= max)
至while (min < max)
mid = (min+max) / 2