Java 简单二分搜索问题的三元运算符

Java ternary operator on simple binary search problem

如何重构此代码以使其不包含“int ans =”我想保留三元运算符。由于 int ans 实际上不是答案,因此保持这种方式没有意义。

使用三元运算符更改左/右值的正确方法是什么?

public class Main {
    public static void main(String[] args) {

        int[] nums = {-1, 0, 3, 5, 9, 12};
        System.out.println(search(nums, 0));

    }

    public static int search(int[] nums, int target) {
        int middle, left = 0, right = nums.length - 1;
        while (left <= right) {
            middle = left + (right - left) / 2;
            if (nums[middle] == target) return middle;
            int ans = (nums[middle] < target) ? (left = middle + 1) : (right = middle - 1);
        }
        return -1;
    }
}

条件运算符只能用作表达式的一部分。表达式不能单独存在,而必须是语句的一部分。分配变量是一个语句。计算一个值而不存储它不是。将表达式转换为语句:

int ans = (nums[middle] < target) ? (left = middle + 1) : (right = middle - 1);

变为:

if (nums[middle] < target) {
  left = middle + 1;
} else {
  right = middle - 1;
}

如果你想节省几个按键:

if (nums[middle] < target) left = middle + 1;
else right = middle - 1;

JLS相关链接:

由于我的背景主要是 JavaScript/TypeScript,我试图在 Java 中提出一个类似这样的解决方案:

const binarySearchArr = (arr: number[], target: number): number => {
  let left = 0;
  let right = arr.length - 1;

  while (left <= right) {
    let middle = left + Math.floor((right - left) / 2);

    if (arr[middle] === target) {
      return middle;
    }
    arr[middle] < target ? (left = middle + 1) : (right = middle - 1);
  }

  return -1;
};

根据 QBrute 的评论,我必须保留“int ans =”的原因是因为 Java 不支持将三元运算符用作独立表达式。