This week's book giveaway is in the Artificial Intelligence forum.
We're giving away four copies of Pragmatic AI and have Noah Gift on-line!
See this thread for details.
Win a copy of Pragmatic AI this week in the Artificial Intelligence forum!
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Jeanne Boyarsky
  • Liutauras Vilda
  • Campbell Ritchie
  • Tim Cooke
  • Bear Bibeault
Sheriffs:
  • Paul Clapham
  • Junilu Lacar
  • Knute Snortum
Saloon Keepers:
  • Ron McLeod
  • Ganesh Patekar
  • Tim Moores
  • Pete Letkeman
  • Stephan van Hulst
Bartenders:
  • Carey Brown
  • Tim Holloway
  • Joe Ess

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
 
Consider Paul's rocket mass heater.
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!