如何将此if-else语句转换为一行简写形式

时间:2019-04-06 17:09:56

标签: java ternary-operator

如果要把其他状态变成一行,我想怎么做?请帮助

if(bet > 0 && this.getPoints() >= bet) {
    this.bet = bet;
    return true;
} else {
    this.bet = 0;
    return false;
}

我尝试过

if(bet > 0 && this.getPoints() >= bet)? 
    this.bet=bet, return true: 
    this.bet=0,r eturn false;

5 个答案:

答案 0 :(得分:2)

您的语法不正确。三元运算符的语法为

condition ? valueIfTrue : valueIfFalse

因此您可以使用此:

boolean shouldUpdateBet = bet > 0 && this.getPoints() >= bet;
this.bet = shouldUpdateBet ? bet : 0;
return shouldUpdateBet;

但是更加简洁并不意味着更具可读性。选择什么使代码最容易阅读。

答案 1 :(得分:1)

换行符还是会被编译器剥离,因此您只需删除该行 破坏您的代码以使其成为一线! ;)

更重要的是,您不能在一个三元语句中做到这一点。因为三元运算符在子句中仅采用单个表达式。您不能在单个子句中为this.betreturn进行赋值。

此外,您不应在此处尝试使用三元运算符。生成的代码将难以阅读和调试。

答案 2 :(得分:0)

可以

   return (this.bet = (bet > 0 && getPoints() >= bet ? bet : 0)) != 0;

-但出于清楚原因,我不会。

打破这一点:

  1. 条件表达式确定下注的大小,0或指定的大小。
  2. 任务相应地设置了this.bet
  3. 不等式根据返回值this.bet确定返回值,这时我们知道无效投注为零,有效投注为非零

答案 3 :(得分:0)

为了便于阅读,我至少将其设为两行:

this.bet = bet > 0 && getPoints() >= bet ? bet : 0;
return this.bet > 0;

但是我觉得你在刹车command-query separation。 仅对设置部分使用一种方法,然后添加一种方法来查询下注是否具有值:

class ... {

  int bet = 0;
  void setBet(int bet) {
    this.bet = bet > 0 && getPoints() >= bet ? bet : 0;
  }
  boolean validBet() {
    return bet != 0;
  }
  int getPoints () { ... }
  int getBet() { return bet; } 
  ...
}

(已修复错误)

答案 4 :(得分:-1)

使用三元运算符时,您不能在一行中执行此操作。您可以分两行执行此操作。

this.bet = (bet > 0 && this.getPoints() >= bet)? bet: 0; 
return ( (bet > 0 && this.getPoints() >= bet)? true:false );