我不明白为什么以下代码返回 0 。
首先,这是我的测试:
@Test
public void testOddEntriesMatchRecursive() {
int[] arr = new int[]{1,3,5};
...
Assert.assertEquals(2, Chopper.chopRecursive(5, arr));
}
接下来,以下是重要的实施部分:
static int chopRecursive(int toFind, int[] arr) {
/* Empty array test */
if (arr.length == 0) return -1;
/* Calculate the midpoint */
int midpoint = (arr.length) / 2;
if (arr[midpoint] == toFind) {
return midpoint;
} else if (arr[midpoint] > toFind) {
if (midpoint == 1) {
if (arr[0] == toFind)
return 0;
else
return -1;
} else {
return midpoint + chopRecursive(toFind, Arrays.copyOfRange(arr, 0, midpoint));
}
} else {
return midpoint + chopRecursive(toFind, Arrays.copyOfRange(arr, midpoint, (arr.length - 1)));
}
}
最后,这是我测试的结果:
java.lang.AssertionError:
Expected :2
Actual :0
答案 0 :(得分:2)
您的问题可能出在以下调用中:
Arrays.copyOfRange(arr, midpoint, (arr.length - 1))
根据文件:
参数 to - 要复制的范围的最终索引,独占。 (该索引可能位于数组之外。)
如果我将通话更改为:
Arrays.copyOfRange(arr, midpoint, arr.length)
它返回2.