5

我最近在编程并使用 ? : 操作数。这是我的代码。

    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 语句,但它们不能解决问题。有人可以帮助我吗?

4

4 回答 4

10

不是每个表达式都是一个语句。在这里使用一个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();

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

于 2013-01-20T23:03:21.107 回答
3

编译器是对的。三元运算符返回一些东西,所以你需要将它分配给一个变量。

于 2013-01-20T23:03:25.873 回答
3

Java 不是 perl。使用 if 语句:

 if (rand.nextInt(1) == 0) {
    vertShip(board);
 } else { 
    horizShip(board);
 }

您不能通过粘贴三元来构建函数调用语句?在前面。

于 2013-01-20T23:04:09.403 回答
1
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 

使用适当的构造。

于 2013-01-20T23:17:13.107 回答