What can be in the parentheses of a Java for loop?
My question is about Java for statements, such as
for (int i = 0; i < 10; ++i) {/* stuff */}
What I don't understand is how much code / what kind of code I can put in parentheses (i.e. I have int i = 0; I < 10; I'm in my example) - I really don't understand the language used to describe it: http://java.sun.com/docs/books/jls/third_edition/html/statements.html#24588
Basically, my problem boils down to requiring bits in the translation specification to look like:
ForInit: StatementExpressionList LocalVariableDeclaration
Editor: Wow I think the real answer is "learn to read and understand the symbols used in JLS - it is used for some reason." Thank you for all your answers
Solution
Statementexpressionlist and localvariabledeclaration are defined elsewhere on the page I'll copy them here:
StatementExpressionList:
        StatementExpression
        StatementExpressionList,StatementExpression
StatementExpression:
        Assignment
        PreIncrementExpression
        PreDecrementExpression
        PostIncrementExpression
        PostDecrementExpression
        MethodInvocation
        ClassInstanceCreationExpression
and
LocalVariableDeclaration:
        VariableModifiers Type VariableDeclarators
VariableDeclarators:
        VariableDeclarator
        VariableDeclarators,VariableDeclarator
VariableDeclarator:
        VariableDeclaratorId
        VariableDeclaratorId = VariableInitializer
VariableDeclaratorId:
        Identifier
        VariableDeclaratorId [ ]
VariableInitializer:
        Expression
        ArrayInitializer
It doesn't make much sense to follow grammar further; I hope it's easy to read
This means that you can use any number of statementexpressions (separated by commas) or localvariabledeclaration. In the forinit section Localvariabledeclaration can consist of any number of "variable = value" pairs, separated by commas and starting with their types
So this is legal:
for (int i = 0,j = 0,k = 0;;) { }
Because "int i = 0, k = 0" is a valid localvariabledeclaration This is legal:
int i = 0;
String str = "Hello";
for (str = "hi",i++,++i,sayHello(),new MyClass();;) { }
Because all random content in the initializer conforms to statementexpressions
Since statementexpressionlist is allowed in the update part of the for loop, it is also valid:
int i = 0;
String str = "Hello";
for (;;str = "hi",new MyClass()) { }
Did you start taking pictures?
