我想把这个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;
你的语法不正确。三元运算符的语法是
condition ? valueIfTrue : valueIfFalse
所以你可以使用这个:
boolean shouldUpdateBet = bet > 0 && this.getPoints() >= bet;
this.bet = shouldUpdateBet ? bet : 0;
return shouldUpdateBet;
但更简洁并不意味着更具可读性。选择使代码最易读的内容。
无论如何,编译器都会删除换行符,这样您就可以从代码中删除换行符,使其成为一行代码! ;)
更严重的是,你不能在一个单一的三元声明中做到这一点。因为三元运算符只在子句中使用单个表达式。你不能在单个条款中对this.bet
和return
进行任务。
此外,您不应该尝试在这里使用三元运算符。生成的代码很难读取和调试。
你可以写
return (this.bet = (bet > 0 && getPoints() >= bet ? bet : 0)) != 0;
- 但出于清晰的原因,我不会这样做。
打破这个:
this.bet
this.bet
的内容确定返回值,此时我们知道无效投注为零,或者有效投注为非零为了便于阅读,我会至少使用两行:
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; }
...
}
(修正了错误)
使用三元运算符时,不能在一行中执行此操作。你可以用两行来完成。
this.bet = (bet > 0 && this.getPoints() >= bet)? bet: 0;
return ( (bet > 0 && this.getPoints() >= bet)? true:false );