我正在尝试为我的Blackjack游戏更新softcount来计算正在播放的Aces(值11或1)。使用短格式IF语句时,为什么第一行代码不正确,但第二行可以使用?这种if语句是否有限?
(counter > 1) ? (softcount+=1) : (softcount+=value); // bad
softcount += (counter > 1) ? 1 : value; // good
它只是语言的定义方式。
只有某些表达式 - 语句表达式 - 可以通过添加;
而成为一个语句。 (语句表达式+ ;
是表达式语句)。
来自JLS Sec 14.8:
ExpressionStatement:
StatementExpression ;
StatementExpression:
Assignment
PreIncrementExpression
PreDecrementExpression
PostIncrementExpression
PostDecrementExpression
MethodInvocation
ClassInstanceCreationExpression
条件表达式不是语句表达式。
三元组必须被视为评估某事物的一种方式,而不是一种应用处理的方式。
因此它需要在?
之后的一些表达式,但是你在第一个代码中写了一些语句:softcount+=1
和(softcount+=value)
。
在第二个代码中,它是可以的,因为你指定了两个表达式:1
和value
。
除此之外你真的觉得这个代码很简单吗?
(counter > 1) ? (softcount+=1) : (softcount+=value); // bad
你重复增量部分。
你想要的只是:
if (counter > 1) { softcount+=1;} else {softcount+=value;)
它被称为三元运算符,当您只想根据条件返回值时使用它。它的主要目的是避免使用简单的avaluations。在你的情况下你应该使用if else。