为什么不能在简短的IF语句中进行条件赋值?

时间:2019-04-26 11:06:16

标签: java if-statement shorthand

我正在尝试为我的二十一点游戏更新软计数,以说明正在播放的Ace(值11或1)。使用简短的IF语句时,为什么第一行代码不正确,但是第二行可以使用?这种if语句是否受限制?

(counter > 1) ? (softcount+=1) : (softcount+=value); // bad


softcount += (counter > 1) ? 1 : value; // good

3 个答案:

答案 0 :(得分:1)

必须将三元视为评估某些事物的一种方法,而不是将其应用于处理的一种方法。
因此,它期望在?之后有一些表达式,但是您在第一个代码中写了语句softcount+=1(softcount+=value)
在第二个代码中,这是可以的,因为您指定了两个表达式:1value

此外,您真的可以很方便地找到此代码吗?

(counter > 1) ? (softcount+=1) : (softcount+=value); // bad

您重复增量部分。

您所需要的只是:

if (counter > 1) { softcount+=1;} else {softcount+=value;)

答案 1 :(得分:1)

这是语言的简单定义。

通过添加;,只能将某些表达式(语句表达式)制成语句。 (语句表达式+ ;表达式语句)。

来自JLS Sec 14.8

ExpressionStatement:
  StatementExpression ;

StatementExpression:
  Assignment 
  PreIncrementExpression 
  PreDecrementExpression 
  PostIncrementExpression 
  PostDecrementExpression 
  MethodInvocation 
  ClassInstanceCreationExpression

条件表达式不是语句表达式。

答案 2 :(得分:0)

它称为三元运算符,仅在您想根据条件返回值时使用。它的主要目的是避免进行简单评估。在您的情况下,应使用if else。