Java 三值运算符不工作

Java 三值运算符不工作,java,ternary-operator,Java,Ternary Operator,Netbeans说我的三元运算符不是一个语句。为什么 int direction; direction = (Math.random() < 0.5) ? 0 : 1; // direction is either L or R (0 or 1) direction == 0 ? System.out.print('L') : System.out.print('R'); int方向; 方向=(Math.random()

Netbeans说我的三元运算符不是一个语句。为什么

int direction;
direction = (Math.random() < 0.5) ? 0 : 1; // direction is either L or R (0 or 1)
direction == 0 ? System.out.print('L') : System.out.print('R');
int方向;
方向=(Math.random()<0.5)?0 : 1; // 方向为L或R(0或1)
方向==0?系统输出打印('L'):系统输出打印('R');
我尝试了if/then/else对应项,效果很好:

int direction;
direction = (Math.random() < 0.5) ? 0 : 1; // direction is either L or R (0 or 1)
if(direction == 0){
    System.out.print('L');
} else {
    System.out.print('R');
}
int方向;
方向=(Math.random()<0.5)?0 : 1; // 方向为L或R(0或1)
如果(方向==0){
系统输出打印(“L”);
}否则{
系统输出打印('R');
}

三元运算符中的语句必须是非无效的。他们需要归还一些东西

System.out.println(direction == 0 ? 'L' : 'R');

三元运算符用于计算两个表达式中的一个,而不是执行两个语句中的一个。(如果函数被声明为返回值,则调用函数可以是一个表达式;但是,
System.out
是一个
PrintStream
PrintStream.print
是一个
void
函数。)您可以坚持使用
if…else
结构来完成您正在尝试的操作,也可以这样做:

System.out.print(direction == 0 ? 'L' : 'R');
注:@iamcreasy的评论指出了我对上述内容的措辞有点不精确。表达式的计算结果可能为零,所以我应该说的是,三元运算符计算两个非
void
表达式中的一个。根据报告:

这是第二个或第三个操作数的编译时错误 表达式是对void方法的调用


从JLS部分
15.25。条件运算符?

第二个或第三个操作数表达式调用void方法是编译时错误

此处的第二个和第三个操作数表达式:

direction == 0 ? System.out.print('L') : System.out.print('R');
void
,因此这不是三元表达式的有效用法。您可以坚持使用
if-else
或使用类似于此选项的选项:

System.out.print( direction == 0 ? 'L' : 'R' );
这里的逻辑也不正确:

direction = (int)(Math.random() * 1);

direction
将始终计算为
0
,因为
Math.random()
生成范围
[0.0,1.0)
这意味着它不包括
1.0
,而将
double
强制转换为
int
正好。使用是一个很好的替代方法。

在Java中,0没有布尔表示。只能使用布尔表达式。关于
Math.random()的用法可能与+1重复
.OP应该使用
Math.random()*2
或创建
java.util.random
对象,并使用
nextInt(2)
。是的,实际上我一测试程序就发现了。将其更改为direction=(Math.random()<0.5)?0:1;但是根据MethodInvocation是一个表达式语句。那么它是否意味着表达式可以返回void?(在一般情况下)@iamcreasy-表达式确实可以是void(我不会使用“return void”,因为“return”在JLS中有特定的技术含义)但在一般情况下,根据,计算表达式的结果可以是变量(类似于C中的左值)、值或零(无效表达式)。然而,无效表达式“只能用作表达式语句(§14.8),因为表达式出现的所有其他上下文都要求表达式表示某些内容。”