Win a copy of Learn Spring Security (video course) this week in the Spring forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Another question regarding the "for" loop

 
Derek Harper
Greenhorn
Posts: 25
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Greetings,

I have another question regarding a "for" loop. Take a look at the following program:

class ForLoop{
public static void main(String[]args){

int i;
OuterLoop: for(i = 3; i > 0; i--){
InnerLoop: for(int j = 0; j < 4; j++){
System.out.println("i = " + i + " and j = " + j);
if(i == j)
break InnerLoop;
}
}
}
}


The output is:

i = 3 and j = 0
i = 3 and j = 1
i = 3 and j = 2
i = 3 and j = 3
i = 2 and j = 0
i = 2 and j = 1
i = 2 and j = 2
i = 1 and j = 0
i = 1 and j = 1

I'm trying to make sure that i'm understanding why i get the output i did. My understanding is when starting out, i = 3, it goes through the OuterLoop, the condition is checked (true), and it is then passed into the value of 'i':

i = 3

Next, in the InnerLoop, j starts out as '0' and goes through the loop, the condition is checked(true) and is passed into the value of 'j':

j = 0

Looking at the if statement, the lnnerLoop continues through the loop, increments according to the rule until 'j' becomes '3':

i = 3 and j = 1
i = 3 and j = 2
i = 3 and j = 3

(i == j) <-------- code breaks when i = 3 and j = 3

The InnerLoop stops ("break InnerLoop") and the OuterLoop starts over as i decrements (i--) and becomes 2, goes through the OuterLoop again, the condition is checked (true) and passed into 'i' again:

i = 2

Then the InnerLoop continues it's loop as j starts out again as 0, increments according to the rule until 'j' becomes '2':


i = 2 and j = 0
i = 2 and j = 1
i = 2 and j = 2

(i == j) <-------- code breaks when i = 2 and j = 2

.....and so on and so forth.


Am i correct in my assessment? Thanks in advance.
 
marc weber
Sheriff
Posts: 11343
Java Mac Safari
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Originally posted by Derek Harper:
... Am i correct in my assessment? ...

Yes, good job!
 
Peter Chase
Ranch Hand
Posts: 1970
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Now, having learnt how the "break label" statement works, you should forget all about it! It's not nice programming style at all.
[ April 04, 2008: Message edited by: Peter Chase ]
 
Campbell Ritchie
Sheriff
Posts: 48363
56
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Originally posted by Peter Chase:
Now, having learnt how the "break label" statement works, you should forget all about it! It's not nice programming style at all.

[ April 04, 2008: Message edited by: Peter Chase ]
I'm trying my hardest to forget about break without a label, too

 
Derek Harper
Greenhorn
Posts: 25
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Thanks Marc.

Peter,

I'm curious about your statement. Why is it not good programming style? Please enlighten me.


Thanks in advance.
 
fred rosenberger
lowercase baba
Bartender
Posts: 12083
29
Chrome Java Linux
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
some people consider the 'break label' to be nothing more than a camouflaged 'goto' statement. that is arguable, in my opinion. there is not a STRONG argument, but i believe one could be made.
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic