我正在使用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);
任何人都可以弄明白为什么我会这样做吗?如何使用调试器识别问题?
答案 0 :(得分:1)
由于缺少括号,中间索引元素计算错误。
应该是:
int mid = (min + max) / 2;
而不是
int mid = min + max / 2;
计算,添加不必要的括号min + (max / 2)
。
通过使用您喜欢的调试器对代码进行逐步分析,您可以轻松找到问题所在。