这个三元运算符如何处理这个语句?

Posted

技术标签:

【中文标题】这个三元运算符如何处理这个语句?【英文标题】:how this Ternary Operator work with this statemnt? 【发布时间】:2022-01-10 15:31:27 【问题描述】:

我只是生成这个方法来在某个矩阵中找到最大 val 并且不知何故我能够更改 int val insdie 三元运算符 (java 8)

int  max=0, indexToReturn=0;
        int size= arr[0].length;
        for (int i=1 ; i < size ; i++)
        
            //
            //                                                 ¯\_(ツ)_/¯
            max =  (!(arr[j][indexToReturn] > arr[j][i])) ? indexToReturn= i : arr[j][indexToReturn] ;
        
     return max > 0 ||  indexToReturn==size-1 ? arr[j][indexToReturn] : null;

(方法编译和工作)

我不确定埃文是如何根据我在网上看到的三元运算符语法编译的:

variable = Expression1 ? Expression2: Expression3

有人可以解释一下我在这里缺少什么吗?

【问题讨论】:

【参考方案1】:

之所以有效,是因为赋值是一个表达式。赋值的值就是赋值的值。这听起来很理论,所以让我们看一个例子:

int i, k;
i = (k = 5);
System.out.println(i);
System.out.println(k);

Ideone demo

表达式k = 5 的值是赋值5。然后将此值分配给i

有了这些知识,我们看到indexToReturn= i 是一个表达式,其计算结果为i。当我们交换Expression2Expression3 时,三元运算符会中断,因为 = i 没有作为三元运算符的一部分进行评估(由于运算符优先级)。如果我们在Expression2 周围设置括号,它会按预期工作。


我不鼓励使用赋值是表达式这一事实。 (Ab)使用这个事实通常会导致代码难以理解。

【讨论】:

以上是关于这个三元运算符如何处理这个语句?的主要内容,如果未能解决你的问题,请参考以下文章

三元运算符判断

函数式编程(三元运算文件操作)

如何用三元运算符(?:)替换“if”语句?

python如何处理单行实现三元表达式求解

el-table-column prop使用三元运算符(动态展示数据)

php 中 三元运算和 IF语句 运行速度