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 SE7Java言語仕様のセクション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 に答える