数组中的小数位? (Java)

时间:2019-03-31 22:45:21

标签: java arrays

我看过这段代码,应该很好,我不明白为什么例如“ 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); }
}
}

2 个答案:

答案 0 :(得分:3)

leftright2都是整数,因此将执行整数除法,结果也将是整数。 Integer division rounds toward 0,因此所有小数都被截断。

See for yourself

public static void main (String[] args) {
    int middle = 5 / 2;
    System.out.println(middle); // 2
}

答案 1 :(得分:2)

由于两个操作数(leftright)是整数,因此使用整数算术。应用除法后,结果的其余部分将“舍入”为零。

示例

5/2 = 2
7/3 = 2 
8/3 = 2

请参阅以下文章,以获得更好的解释。 Int division: Why is the result of 1/3 == 0?