Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #38021

Re: Can't use block of statements as 'incrementer' in for loop?

From Arne Vajhøj <arne@vajhoej.dk>
Newsgroups comp.lang.java.programmer
Subject Re: Can't use block of statements as 'incrementer' in for loop?
Date 2018-02-14 11:13 -0500
Organization Aioe.org NNTP Server
Message-ID <p61n7e$123l$1@gioia.aioe.org> (permalink)
References <p61mgq$10r6$1@gioia.aioe.org>

Show all headers | View raw


On 2/14/2018 11:01 AM, Robert Spanjaard wrote:
> When you create a for loop, you provide an initialisation statement, a 
> condition, and a continue statement. Usually this continue statement is 
> an incrementer or decrementer, but basically it can be any statement.
> 
> For instance, if you change Oracle's own tutorial example (*1)...
> 
> class ForDemo {
>      public static void main(String[] args){
>           for(int i=1; i<11; i++){
>                System.out.println("Count is: " + i);
>           }
>      }
> }
> 
> ...with this...
> 
> class ForDemo {
>      public static void main(String[] args){
>           for(int i=1; i<11; System.out.println("haha")){
>                System.out.println("Count is: " + i);
>                i++;
>           }
>      }
> }
> 
> ... it still works.
> 
> Now, the same tutorial says "A block is a group of zero or more 
> statements between balanced braces and can be used anywhere a single 
> statement is allowed." (*2)
> 
> But when I replace the single haha-printing statement with any kind of 
> block, the compiler produces an error message:
> 
> ForDemo.java:3: error: illegal start of expression
>        for (int i=1; i<11; { i++; i++; }) {
>                            ^
> 
> I must say I tried this construction purely out of curiosity, 
> remembering Oracle's statement about blocks being allowed anywhere 
> instead of a single statement, so I don't have a practical use case for 
> it. But still I'd like to know why it doesn't work. So, can anyone of 
> you shed some light on this issue? Google search doesn't really help in 
> this case.

I think the problem is that it is not a general statement.

JLS 14.4.1 says that it is a comma separated list of StatementExpression.

JLS 14.8 says that StatementExpression is one of:

Assignment
PreIncrementExpression
PreDecrementExpression
PostIncrementExpression
PostDecrementExpression
MethodInvocation
ClassInstanceCreationExpression

Arne



Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Can't use block of statements as 'incrementer' in for loop? Robert Spanjaard <spamtrap@arumes.com> - 2018-02-14 17:01 +0100
  Re: Can't use block of statements as 'incrementer' in for loop? Arne Vajhøj <arne@vajhoej.dk> - 2018-02-14 11:13 -0500
  Re: Can't use block of statements as 'incrementer' in for loop? Eric Sosman <esosman@comcast-dot-net.invalid> - 2018-02-14 11:34 -0500
  Re: Can't use block of statements as 'incrementer' in for loop? Eric Douglas <e.d.programmer@gmail.com> - 2018-02-14 10:57 -0800
    Re: Can't use block of statements as 'incrementer' in for loop? Robert Spanjaard <spamtrap@arumes.com> - 2018-02-15 12:05 +0100
      Re: Can't use block of statements as 'incrementer' in for loop? Eric Douglas <e.d.programmer@gmail.com> - 2018-02-15 04:49 -0800

csiph-web