我看过这段代码,应该很好,我不明白为什么例如“ left + right”是一个奇数,为什么执行“ a [middle] == 0”不会给出错误因为它在数组的小数位中不存在。谢谢。
/** Searches the value 0 within a[left..right].
* Precondition: 0 <= left, right < a.length,
* a[left..right] is sorted in ascending order. */
public static int intercepts(double[] a, int left, int right) {
if (left > right) { return -1; }
else {
int middle = (left + right) / 2;
if (a[middle] == 0) { return middle; }
else if (a[middle] > 0) {
return intercepts(a, left, middle - 1);
} else {
return intercepts(a, middle + 1, right); }
}
}
答案 0 :(得分:3)
left
,right
和2
都是整数,因此将执行整数除法,结果也将是整数。 Integer division rounds toward 0,因此所有小数都被截断。
public static void main (String[] args) {
int middle = 5 / 2;
System.out.println(middle); // 2
}
答案 1 :(得分:2)
由于两个操作数(left
和right
)是整数,因此使用整数算术。应用除法后,结果的其余部分将“舍入”为零。
示例
5/2 = 2
7/3 = 2
8/3 = 2
请参阅以下文章,以获得更好的解释。 Int division: Why is the result of 1/3 == 0?