代码之家  ›  专栏  ›  技术社区  ›  Haikel

是否可以将这两行写为三元运算符?

  •  2
  • Haikel  · 技术社区  · 7 年前

    例子:

    if (i < n) 
        i++;
    else 
       j += 2;
    

    我做到了:

    i += i < n ? 1 : j += 2; 
    

    (但编译器显示错误)

    如果可能的话,我怎么能把这些行写成三元运算符呢。。 谢谢

    3 回复  |  直到 7 年前
        1
  •  5
  •   T.J. Crowder    7 年前

    (这是“条件”操作符。它是 三元运算符,目前Java是唯一的一个,但是……)

    因为你并不总是改变 i ,并且Java不允许将任意表达式作为独立语句(像其他一些语言一样,如JavaScript,do),除非给自己一个 nop 方法或其他方法,以便可以在表达式上下文中使用条件。或者做一些真正令人费解的事情。

    也没有理由这么做。 if 非常清楚。

    但如果你愿意,考虑到:

    private static void nop(int n) {
    }
    

    然后

    nop(i < n ? (i = i + 1) : (j = j + 2));
    

    还有一种非常复杂的方式:

    i = i < n ? i + 1 : (j = j + 2) == j ? i : 0;
    

    ...只是分配 返回自身,如果 i < n 是假的,因为我们知道 (j = j + 2) == j true .

    但再次强调:没有理由这样做。

        2
  •  2
  •   davidxxx    7 年前

    条件运算符 ? (或三元运算符)用于为单个变量赋值。

    Oracle training/examples 以以下方式记录此操作:

    此运算符也称为三元运算符,因为它使用 三个操作数。在以下示例中,应读取此运算符 as:“如果someCondition为true,则将value1的值赋给result。 否则,将value2的值指定给result。"

    int value1 = 1;
    int value2 = 2;
    int result;
    boolean someCondition = true;
    result = someCondition ? value1 : value2;
    

    所以,不,你不能 directly 使用三元运算符将结果指定给 j i .


    正如T.J.Crowder所示,您可以使用一种复杂的方式来使用三元运算符,但它不可读且容易出错。

    所以 if 声明应受到青睐。
    为什么要把一件简单易读的东西变得更难读呢?

        3
  •  2
  •   Marc Perlade    6 年前

    您的第一个代码不会返回任何内容,因此使用条件运算符是个坏主意。只需使用 if 语句,它更简单。