Search code examples
javafor-loopcurly-braces

for loop without braces in java


I wonder why this two following codes give different results;

for(i = 1, j = 0; i < 10; i++) {
    j += i;
    System.out.println(i);
}

This one gives the numbers between 1 included and 10 excluded.

for(i = 1, j = 0; i < 10; i++)
    j += i;
System.out.println(i);

However this one gives 10. I could not get the logic of this;

for()
do_something;
do_something_else;

Solution

  • The for loop, the while loop, and the if statement (ignoring else) all control a single Statement:

    for ( [ForInit] ; [Expression] ; [ForUpdate] ) Statement

    for ( {VariableModifier} UnannType VariableDeclaratorId : Expression ) Statement

    while ( Expression ) Statement

    if ( Expression ) Statement

    That statement may be a Block, i.e. braces {} with multiple statements.

    So, this code is all the same:

    for(i=1, j=0;i<10;i++)
    j += i;
    System.out.println(i);
    
    for(i=1, j=0;i<10;i++)
        j += i;
        System.out.println(i);
    
    for(i=1, j=0;i<10;i++)
        j += i;
    System.out.println(i);
    
    for(i=1, j=0;i<10;i++) {
        j += i;
    }
    System.out.println(i);
    

    The first two are very bad, because they hide (misrepresent) the code structure.

    Many people advocate always using blocks, to prevent confusing and coding errors.