我正在使用 Eclipse。这是我的代码:
private int binarySearch(int[] arraySorted, int value, int min, int max) {
if (max < min) {
return -1;
} else {
int mid = min + max / 2;
if (value > arraySorted[mid]) // LINE 22
return binarySearch(arraySorted, value, mid + 1, max);
else if (value < arraySorted[mid])
return binarySearch(arraySorted, value, min, mid - 1);
else
return mid;
}
}
这是我的错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7
at Launcher.binarySearch(Launcher.java:22)
at Launcher.binarySearch(Launcher.java:23)
at Launcher.main(Launcher.java:14)
我这样调用方法:
int[] arraySorted = { 0, 1, 2, 2, 4, 7, 99 };
binarySearch(arraySorted, searchNum, 0, arraySorted.length - 1);
谁能弄清楚我为什么会收到这个?如何使用调试器识别问题?
最佳答案
由于缺少括号,中间索引元素计算错误。
应该是:
int mid = (min + max) / 2;
而不是
int mid = min + max / 2;
计算,添加不必要的括号,min + (max/2)
。
通过使用您最喜欢的调试器对代码进行逐步分析,您可以轻松找出问题所在。
关于java - 为什么我的二进制搜索会产生 ArrayIndexOutOfBoundsException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33464667/