加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java三元运算符混淆

发布时间:2020-12-15 05:13:05 所属栏目:Java 来源:网络整理
导读:这是我的代码 public class BinarySearch { public static int binsearch(int key,int[] a) { int lo = 0; int hi = a.length - 1; while (lo hi) { int mid = (lo + hi) 1; key a[mid] ? hi = mid : lo = (mid + 1); } return lo--; }} 我在编译时遇到错误
这是我的代码

public class BinarySearch {
    public static int binsearch(int key,int[] a)
    {
        int lo = 0;
        int hi = a.length - 1;
        while (lo < hi)
        {
            int mid = (lo + hi) >> 1;
            key < a[mid] ? hi = mid : lo = (mid + 1);
        }
        return lo--;

    }
}

我在编译时遇到错误

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    Syntax error on tokens,Expression expected instead
    Syntax error on token "]",delete this token
    Syntax error,insert "]" to complete Expression

如果我改变’<'到'>‘如

key > a[mid] ? hi = mid : lo = (mid + 1);

得到了完全不同的错误:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
    Syntax error on token ">",-> expected

我真的很困惑java中的三元运算符用法.
毕竟,这段代码在c中工作正常

解决方法

编译器很难解析表达式,因为它像statement-expression一样使用.

由于三元运算符是表达式,因此不应该使用它来代替语句.由于您希望使用条件来控制赋值(这是一个语句),因此您应该使用常规if:

if (key < a[mid]) {
    hi = mid;
} else {
    lo = (mid + 1);
)

*实际上,Java不允许将三元表达式用作语句.您可以通过将表达式包装在赋值或初始化中来解决此问题(请参阅demo),但这会导致代码难以阅读和理解,因此应该避免使用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读