如何将这个if-else语句转换为一行短格式[关闭]

问题描述 投票:-3回答:5

我想把这个if else状态变成一行,我怎么能这样做?请帮忙

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;
java ternary-operator
5个回答
2
投票

你的语法不正确。三元运算符的语法是

condition ? valueIfTrue : valueIfFalse

所以你可以使用这个:

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

但更简洁并不意味着更具可读性。选择使代码最易读的内容。


1
投票

无论如何,编译器都会删除换行符,这样您就可以从代码中删除换行符,使其成为一行代码! ;)

更严重的是,你不能在一个单一的三元声明中做到这一点。因为三元运算符只在子句中使用单个表达式。你不能在单个条款中对this.betreturn进行任务。

此外,您不应该尝试在这里使用三元运算符。生成的代码很难读取和调试。


0
投票

你可以写

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

- 但出于清晰的原因,我不会这样做。

打破这个:

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

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; } 
  ...
}

(修正了错误)


-1
投票

使用三元运算符时,不能在一行中执行此操作。你可以用两行来完成。

this.bet = (bet > 0 && this.getPoints() >= bet)? bet: 0; 
return ( (bet > 0 && this.getPoints() >= bet)? true:false );
© www.soinside.com 2019 - 2024. All rights reserved.