• Post Reply Bookmark Topic Watch Topic
  • New Topic

loop  RSS feed

 
Ranch Hand
Posts: 290
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
public class lap
{
public static void main(String[]rgs)
{
for(int j=0,k=0;j<10&&k<10;k+=++j==10 ? 1+(j=0):0)
System.out.println( " k "+k+", j "+j);
}
}

Hi everybody,
can anybody explain that loop.?
 
Ranch Hand
Posts: 1070
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
nitin, did you get this from a mock?
Stuff like this is so unreadable that it isn't even worth it. The key is for people to write self-documenting code and not making it so you have to spend an hour with pen and paper trying to figure out what the loop does. I don't think Sun will ask you a question like this, so I would skip it. Too much work and not worth trying to figure out.
Just my opinion.
Bill
 
Ranch Hand
Posts: 54
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator

Originally posted by nitin sharma:
public class lap
{
public static void main(String[]rgs)
{
for(int j=0,k=0;j<10&&k<10;k+=++j==10 ? 1+(j=0):0)<br /> System.out.println( " k "+k+", j "+j);<br /> }<br /> }<br /> <br /> Hi everybody,<br /> can anybody explain that loop.?

<br /> Hello,<br /> This is what i understood from the loop .Anybody correct me if i am wrong.<br /> Initially j=0 and k=0.This loop exits when eitherj>=10 or k>=10.
The increment condition
k+=++j==10?1+(j=0):0
implies :
1.j is incremented.
2.if j is equal to 10 ,j is assigned the value 0 and k is incremented by 1 from it's previous value.
3.if j is not equal to 10 k is not incremented from it's previous value i.e k+=0
the output will clarify my explanation:
1.The first output will be k 0 j 0
2.Then j will be incremented to 1,2,3,4,5,6,7,8,9 and for all these values of j the value of k will be 0.
3.The value of j gets incremented to 10 then j is assigned a value of 0 and k is incremented to 1.
4.The steps 2 and 3 continue until k reaches the value of 10 when the loop exits.
I think this loop is like a nested loop.It can also be re-written as:
for(int k=0;k<10;k++) {
for(int j=0;j<10;j++) {
System.out.println("k"+k+",j"+j);
}
}
Hope this helps
 
Greenhorn
Posts: 17
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator

Originally posted by nitin sharma:
public class lap
{
public static void main(String[]rgs)
{
for(int j=0,k=0;j<10&&k<10;k+=++j==10 ? 1+(j=0):0)
System.out.println( " k "+k+", j "+j);
}
}

Hi everybody,
can anybody explain that loop.?


-----------------------------
Step 0 = first part of for
step 1 = second part of for
step 2 = third part of for
for # 1: step 0: j=0 k=0
step 1: Step 1-1: j<10 gives true
Step 1-2: k<10 gives true
Step 1-3: true && true gives true

---Thus prints k=0, j=0
step 2: Now we see at k+=++j==10 ? 1+(j=0):0
Now according to JVM it this expression has to do four MAJOR operators
1) +=
2) ++
3) ==
4) ? :
According to precedence table, the order of operations will be 2,3,4,1.i.e. ++, ==, ? :, +=
So here we go

step 2-1: first ++j is evaluated thus ++j giving j = 1
step 2-2: now == is evaluated thus 1==10 gives false
step 2-3: now the turnary opearator goes, So having result of false, the right side of : gives 0
step 2-4: The 0 got from the turnary operator gives k+=0 thus making k=0
FINALLY, At the end we are having k=0 and j=1
for # 2: Step 0: Will Not execute (and now onwards, step zero is ignored in this explaination)
Step 1: 1<10 && 0<10 gives true
---Prints k=0, j=1
Step 2: 2-1: makes j=2
2-2: 2==10 gives false
2-3: gives 0
2-4: k+=0 gives k=0

FINALLY, At the end we are having k=0 and j=2
for # 3: Step 1: 2<10 && 0<10 gives true
---Prints k=0, j=2
Step 2: 2-1: makes j=3
2-2: 3==10 gives false
2-3: gives 0
2-4: k+=0 gives k=0

FINALLY, At the end we are having k=0 and j=3
*****************************************************************
Now calculate urself how for # 4,5,6,7,8,9 goes and let us evaluate for # 10
*****************************************************************
for # 10: Step 1: 9<10 && 0<10 gives true
---Prints k=0, j=9
Step 2: 2-1: makes j=10
2-2: 10==10 gives TRUE
2-3: gives true side of the turnary operator.i.e. 1+(j=0) which makes j=0 and 1+0 and thus 1
2-4: k+=1 gives k=1

FINALLY, At the end we are having k=1 and j=0
for # 11: Step 1: 0<10 && 1<10 gives true
---Prints k=1, j=0
Step 2: 2-1: makes j=1
2-2: 1==10 gives false
2-3: gives 0
2-4: k+=0 gives k=1

FINALLY, At the end we are having k=1 and j=1

***************************************************************
Let us see what happens at for # 100 and for # 101
***************************************************************
for # 100: Step 1: 9<10 && 9<10 gives true
---Prints k=9, j=9
Step 2: 2-1: makes j=10
2-2: 10==10 gives TRUE
2-3: gives true side of the turnary operator.i.e. 1+(j=0) which makes j=0 and 1+0 and thus 1
2-4: k+=1 gives k=10

FINALLY, At the end we are having k=10 and j=10

for # 101: Step 1: 10<10 && 10<10 gives false
Hence the loop exits.

FINALLY, At the end we are having k=10 and j=10

---------------------------------
Thats all! Please correct me if i am wrong at any step
Thanx
Naveed
 
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!