【问题标题】:assign and execute if/else conditions in single line在单行中分配和执行 if/else 条件
【发布时间】:2015-03-29 22:31:39
【问题描述】:

我该怎么做,例如,if 块检查条件是true 还是false,然后根据该条件执行操作?

喜欢,

if (check true or false) 
         if false do action
         if true do action

类似的事情在同一行没有障碍,这可能吗?

对不起我的英语不好

谢谢。

【问题讨论】:

  • 为什么没有区块?这只是语法。有什么原因吗?
  • 人们对新用户投反对票甚至懒得发表评论让我很伤心。

标签: java if-statement ternary-operator


【解决方案1】:

你可以使用java ternary operator

result = testCondition ? value1 : value2

该语句可以理解为,如果testCondition 为真,则将value1 的值赋给result;否则,将value2 的值赋值给result

简单的例子是,

minVal = a < b ? a : b;

在上面的代码中,如果变量a小于b,则minVal被赋值为a;否则,minVal 将被赋值为b

这里是另一个使用String的例子,

// result is assigned the value "it's false"
String result = false ? "that was true" : "it's false";

这个例子会更清楚。它会正确打印一个人的性别的称呼:

// if `person.isMale()` then its Mr. else its Ms. 
return = "Thank you " + (person.isMale() ? "Mr. " : "Ms. ") + person.getLastName() + ".";

编辑:

问题:您不能在三元运算符中调用方法。

不,这是不正确的。

你可以在三元运算符内部调用一个方法,只要它返回一个与三元运算符左侧相同类型的值,

考虑这个例子,

让我们创建一个返回 String 值的方法,

String message(){
    return "This is returned value";
}

现在看这段代码,

String answer = false ? "true" : message();

这将执行得很好,因为message()return 类型和answer 的变量类型相同,即String

输出:

This is returned value

【讨论】:

  • 谢谢,对于示例,我现在明白了!那么如果(真)?真实行动; : 虚假;不行吗?
  • (true or false) ? (execute this if true) : (execute this if false)
  • 我的意思是如果我可以在那里调用一个方法,例如 (true)?System.out.println("true") : System.out.println("false") 但我看到了@ neeraj-jain 说三元运算不能执行方法,但是谢谢!
  • 在你给定的条件下,即(true)?System.out.println("true") : System.out.println("false") 你的陈述的左边是什么?你可以这样做,System.out.print(false ? "true" : "false");
  • 好的,谢谢大家!左侧将检查 ecample 'if(myNumber == 1) 吗?调用True方法; :调用假方法;'例如,该方法可以是 void。
【解决方案2】:

要将条件语句放在一行中,您可以使用三元运算符。但是请注意,这只能在 assignments 中使用,即如果函数实际返回某些内容并且您想将该值分配给变量。

int abs = x > 0 ? x : -1; 

如果你想执行不返回任何东西但有一些其他副作用的方法,三元运算符不是正确的方法。事实上,它甚至没有编译!

void doThis() {/* do this */}
void doThat() {/* do that */}

(condition) ? doThis() : doThat();  // does not work!

相反,您应该只使用普通的 if-then-else。它也更容易阅读。

if (condition) {
    doThis();
} else {
    doThat();
}

【讨论】:

    【解决方案3】:

    你不能使用三元运算符,因为你不能从Ternary Operator调用任何void方法(即不返回任何东西的方法)

    因为它不是 三元运算符的预期用途。

    如果你真的希望它在 1 行中实现,你可以这样写:

    if (condition) doThisMethod(); else doThatMethod();
    

    【讨论】:

      【解决方案4】:
      max = (a > b) ? a : b;
      

      逻辑上等同于

      if (a > b) {
          max = a;
      } else { max = b; }
      

      【讨论】:

        【解决方案5】:

        也许ternary operator 可以满足您的需求:

        checkIfTrue() ? actionIfTrue() : actionIfFalse();
        

        【讨论】:

          【解决方案6】:

          您可以使用三元运算符:

          if(condition) ? executeForTrue() : executeForFalse();
          

          我猜这几乎可以满足您的需求。

          【讨论】:

            【解决方案7】:

            如果你真的,真的需要单线,你可以使用这种语法(称为三元运算符):

            1>0 ? "do action" : "做其他动作";

            一个例子是这样的:

            字符串结果 = x>y ? "x>y" : "y>x";

            但不建议这样做,大多数人讨厌这种语法,因为如果您在其中级联多个条件,甚至是最糟糕的级联三元运算符,它会变得非常不可读。

            但它有它的用途。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2022-11-14
              • 2014-07-18
              • 2019-01-24
              • 1970-01-01
              • 2021-12-21
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多