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

问题描述 投票:1回答:3

我正在尝试为我的Blackjack游戏更新softcount来计算正在播放的Aces(值11或1)。使用短格式IF语句时,为什么第一行代码不正确,但第二行可以使用?这种if语句是否有限?

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


softcount += (counter > 1) ? 1 : value; // good
java if-statement shorthand
3个回答
1
投票

它只是语言的定义方式。

只有某些表达式 - 语句表达式 - 可以通过添加;而成为一个语句。 (语句表达式+ ;是表达式语句)。

来自JLS Sec 14.8

ExpressionStatement:
  StatementExpression ;

StatementExpression:
  Assignment 
  PreIncrementExpression 
  PreDecrementExpression 
  PostIncrementExpression 
  PostDecrementExpression 
  MethodInvocation 
  ClassInstanceCreationExpression

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


1
投票

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

除此之外你真的觉得这个代码很简单吗?

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

你重复增量部分。

你想要的只是:

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

0
投票

它被称为三元运算符,当您只想根据条件返回值时使用它。它的主要目的是避免使用简单的avaluations。在你的情况下你应该使用if else。

© www.soinside.com 2019 - 2024. All rights reserved.