Java 为什么可以';我不能用三元数吗?操作员在两个函数调用之间进行选择?

Java 为什么可以';我不能用三元数吗?操作员在两个函数调用之间进行选择?,java,Java,我最近正在编程,在使用时遇到了一个问题:操作数。这是我的密码 Random rand = new Random(); for(int x = 0; x < 3; x++) { rand.nextInt(1) == 0 ? vertShip(board) : horizShip(board); } Random rand=new Random(); 对于(int x=0;x(美元板)是的,你也可以用4个字符来解决旅行推销员的问题。好吧,我不能。Joh

我最近正在编程,在使用时遇到了一个问题:操作数。这是我的密码

    Random rand = new Random();
    for(int x = 0; x < 3; x++) {
        rand.nextInt(1) == 0 ? vertShip(board) : horizShip(board);
    }
Random rand=new Random();
对于(int x=0;x<3;x++){
rand.nextInt(1)=0?垂直(板):水平(板);
}
我的编译器向我抛出一个错误,指出行的左侧(rand.nextInt(1)==0)必须是一个变量。我试过一些变体,比如

    Random rand = new Random();
    int a = rand.nextInt(1);
    for(int x = 0; x < 3; x++) {
        a == 0 ? vertShip(board) : horizShip(board);
    }
Random rand=new Random();
int a=兰特·耐克斯汀(1);
对于(int x=0;x<3;x++){
a==0?垂直(板):水平(板);
}

或者如果语句位于左侧,但它们不能解决问题。有人能帮我吗?

不是每个表达式都是语句。在此处使用
if
语句。请参阅JavaSE7Java语言规范中的一节

某些类型的表达式可用作下列语句 用分号表示

ExpressionStatement:
    StatementExpression ;

StatementExpression:
    Assignment
    PreIncrementExpression
    PreDecrementExpression
    PostIncrementExpression
    PostDecrementExpression
    MethodInvocation
    ClassInstanceCreationExpression
上述各项的表达式语句示例:

x = y;
++x;
--x
x++;
x--;
fn(); // Or donkey.fn();, etc.
new Donkey(this);
你不能做的是:

b ? f() : g();
f() + g();
但是,如果您执意要混淆代码,我想您可以编写:

fn(a == 0 ? vertShip(board) : horizShip(board));
(a == 0 ? vertShip(board) : horizShip(board)).fn();

(我想。我手头没有编译器,通常也不会写这样的代码。)

编译器是对的。三元运算符返回一些内容,因此需要将其分配给变量。

Java不是perl。使用if语句:

 if (rand.nextInt(1) == 0) {
    vertShip(board);
 } else { 
    horizShip(board);
 }
不能通过粘贴三元函数来构建函数调用语句?在前面

a == 0 ? vertShip(board) : horizShip(board); // is an expression
if (a == 0) vertShip(board); else horizShip(board); // is a statement
比较:

if (condition) 
{
    execute statement(s)
}
else
{
    execute statement(s)
}
与:


使用适当的构造。

实际的错误消息是什么?看起来没问题。确切的错误信息是什么?另外,
rand.nextBoolean()
可能更简单。“令牌“==”,无效的AssignmentOperator”和“赋值的左侧必须是变量”上的语法错误也会导致许多函数调用,但我们不必将结果分配给任何对象。在Perl中,您实际上可以将公共位提取出来:
($rand->nextInt(1)==0?\&vertShip:\&HORIZHIP)->(美元板)是的,你也可以用4个字符来解决旅行推销员的问题。好吧,我不能。John Skeet可以。只是为了好玩,这里有一个Haskell版本:
(如果nextInt rand 1==0,那么vertShip else horizzhip)board
 expression1 ? expression2 : expression3