I was recently programming and ran into an issue using the ? : operand. Here's my code.
Random rand = new Random();
for(int x = 0; x < 3; x++) {
rand.nextInt(1) == 0 ? vertShip(board) : horizShip(board);
}
My compiler throws me an error stating that the left hand side of the line (rand.nextInt(1) == 0 ) must be a variable. I've tried variants such as
Random rand = new Random();
int a = rand.nextInt(1);
for(int x = 0; x < 3; x++) {
a == 0 ? vertShip(board) : horizShip(board);
}
or if statements in the left hand side but they don't fix the problem. Would anyone be able to help me?
Not every expression is a statement. Use an if
statement here. See Section 14.8 Expression Statements in the Java SE 7 Java Language Specification.
Certain kinds of expressions may be used as statements by following them with semicolons.
ExpressionStatement: StatementExpression ; StatementExpression: Assignment PreIncrementExpression PreDecrementExpression PostIncrementExpression PostDecrementExpression MethodInvocation ClassInstanceCreationExpression
Examples of expression statement for each of the above:
x = y;
++x;
--x
x++;
x--;
fn(); // Or donkey.fn();, etc.
new Donkey(this);
What you can't do is:
b ? f() : g();
f() + g();
However, if you're dead set on obfuscating your code, I guess you could write:
fn(a == 0 ? vertShip(board) : horizShip(board));
(a == 0 ? vertShip(board) : horizShip(board)).fn();
(I think. I don't have a compiler to hand and wouldn't usually write such code.)
The compiler is right. The ternary operator returns something, so you need to assign it to a variable.
Java isn't perl. Use an if statement:
if (rand.nextInt(1) == 0) {
vertShip(board);
} else {
horizShip(board);
}
You can't build a function call statement by sticking the ternary ? on the front.
a == 0 ? vertShip(board) : horizShip(board); // is an expression
if (a == 0) vertShip(board); else horizShip(board); // is a statement
Compare:
if (condition)
{
execute statement(s)
}
else
{
execute statement(s)
}
With:
expression1 ? expression2 : expression3
Use the appropriate construct.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.