繁体   English   中英

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

[英]Why can't you make conditional assignment in short hand IF statement?

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

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


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

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

此外,您是否真的觉得此代码简而言之?

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

您重复增量部分。

您所需要的只是:

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

这只是语言的定义方式。

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

JLS Sec 14.8开始

ExpressionStatement:
  StatementExpression ;

StatementExpression:
  Assignment 
  PreIncrementExpression 
  PreDecrementExpression 
  PostIncrementExpression 
  PostDecrementExpression 
  MethodInvocation 
  ClassInstanceCreationExpression

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM