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 不支持将三元运算符用作独立表达式。
如何重构此代码以使其不包含“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 不支持将三元运算符用作独立表达式。