繁体   English   中英

为什么我不能使用三元?运算符在两个函数调用之间进行选择

[英]Why can't I use the ternary ? operator to select between two function calls?

我最近编程并遇到了一个问题? :操作数。 这是我的代码。

    Random rand = new Random();
    for(int x = 0; x < 3; x++) {
        rand.nextInt(1) == 0 ? vertShip(board) : horizShip(board);
    }

我的编译器抛出一个错误,指出该行的左侧(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);
    }

或者如果左侧的陈述但他们没有解决问题。 有人能帮助我吗?

并非每个表达都是一个陈述。 在这里使用if语句。 请参见Java SE 7 Java语言规范中的第14.8节“ 表达式语句”

某些类型的表达式可以用分号跟随它们作为语句。

 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)
}

附:

 expression1 ? expression2 : expression3 

使用适当的构造。

暂无
暂无

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

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