| 
 | |
| Java2 Certification  | 
 | 
 You can discuss this topic with others at http://www.jchq.net/discus
  Read reviews and buy a Java Certification book at http://www.jchq.net/bookreviews/jcertbooks.htm 
  
Write code using all forms of loops including labeled and unlabeled use of break and continue and state the values taken by loop counter variables during and after loop execution.
The most common method of looping is to use the for statement. Like C++ and unlike C, the variable that controls the looping can be created and initialised from within the for statement. Thus
public class MyLoop{
      public static void main(String argv[]){
      MyLoop ml = new MyLoop();
      ml.amethod();
      }
       public void amethod(){
                for(int K=0;K<5l;K++){ 
                     System.out.println("Outer "+K); 
                     for(int L=0;L<5;L++)
                     {System.out.println("Inner "+L);}
                   }
          }
}
This code will loop 5 times around the inner loop for every time around the outer loop. Thus the output will read
Outer 0; Inner 0 Inner 1 Inner 2 Inner 3 inner 4 Outer 1; Inner 0 Inner 2
etc etc
The for statement is the equivalent of a for/next loop in Visual Basic. You may consider the syntax to be
for(initialization; conditional expression;increment)
The conditional expression must be a boolean test in a similar way to an if statement. In the code example above the for statement was followed by a code block marked by curly braces. In the same way that an if statement does not demand a block you can have a for statement that simply drives the following line thus
        for(int i=0;i<5;i++)
                System.out.println(i);
Note that in neither versions do you terminate the for line with a semi colon. If you do, the for loop will just spin around until the condition is met and then the program will continue in a "straight line". You do not have to create the initialisation variable (in this case) within the for loop, but if you do it means the variable will go out of scope as soon as you exit the loop. This can be considered an advantage in terms of keeping the scope of variables as small as possible.
The while and do loops perform much as you would expect from the equivalent in other languages.
Thus a while will perform zero or more times according to a test and the do will perform one or more times. For a while loop the syntax is
while(condition){
        bodyOfLoop;
}
The condition is a boolean test just like with an if statement. Again you cannot use the C/C++ convention of 0 for true or any other value for false
So you might create a while loop as follows
while(i<4){
        i++;
        System.out.println("Loop value is :"i);
}
Note that if the variable i was 4 or more when you reached the while statement would not result in any output. By contrast a do loop will always execute once.
Thus with the following code you will always get at least one set of output whatever the value of the variable i on entering the loop.
do{
        System.out.println("value of : "+i);
        } while (i <4);
Many programmers try to use the for loop instead of do while loop as it can concentrate the creation initialisation, test and incrementation of a counter all on one line.
The designers of Java decided that they agreed with programming guru Edsger Dijkstra who wrote a famous article titled "Goto considered harmful". Because indiscriminate use of goto statements can result in hard to maintain spaghetti code it has fallen out of use and considered bad programming style. There are situations when it would be useful and to help in those situations Java offers the labeled and unlabeled versions of the break and continue keywords.
These statements allow you to conditionally break out of loops. They do not however, allow you to simply jump to another part of the program. The exam is likely to include questions covering this subject in the form of a set of nested loops. You have to work out what numbers will be printed out before the loops finish due to the action of the break statement.
Here is an example of the sort of irritating question you are likely to get in the exam
public class Br{
public static void main(String argv[]){
        Br b = new Br();
        b.amethod();
        }
        public void amethod(){
        for(int i=0;i <3;i ++){
        System.out.println("i"+i+"\n");
        outer://<==Point of this example
                if(i>2){
                break outer;//<==Point of this example
                }//End of if
               for(int j=0; j <4 && i<3; j++){
                       System.out.println("j"+j);
                       }//End of for
         }//End of for
     }//end of Br method                
}
You then have to pick out which combination of letters are output by the code. By the way the code "\n" means to output a blank line.
It is often desirable to jump from an inner loop to an outer loop according 
  to some condition. You can do this with the use of the labeled break 
  and continue statement.
  
  A label is simply a non key word with a colon placed after it. By placing the 
  name of the label after break or continue your code will jump 
  to the label. This is handy for making part of a loop conditional. You could 
  of course do this with an if statement but a break statement can 
  be convenient. You cannot jump to another loop or method but exiting the current 
  loop is often very useful.
|  | The break statement abandons processing of the current loop entirely, the continue statement only abandons the currently processing time around the loop. | 
Take the following example
public class LabLoop{
                public static void main(String argv[]){
                LabLoop ml = new LabLoop();
  ml.amethod();
   }
        public void amethod(){
                outer:
                for(int i=0;i<2;i++){ 
                                for(int j=0;j<3;j++) {
                                if(j>1)
			                //Try this with break instead of continue
		        	        continue outer;
	                		System.out.println("i "+ i + " j "+j);
				    }
                        }//End of outer for
                        System.out.println("Continuing");
		 }
}
  This version gives the following output
i 0 j 0 i 0 j 1 i 1 j 0 i 1 j 1 Continuing
If you were to substitute the continue command with break, the i counter would stop at zero as the processing of the outer loop would be abandoned instead of simply continuing to the next increment.
|   | 
Question 1)
What will happen when you attempt to compile and run the following code in a method?
        for(int i=0;i<5;){
                System.out.println(i);
                i++;
                continue;
                }
   
1) Compile time error, malformed for statement
  2) Compile time error continue within for loop
  3) runtime error continue statement not reached
  4) compile and run with output 0 to 4
  Question 2)
  What will happen when you attempt to compile and run the following code? 
public class LabLoop{
                public static void main(String argv[]){
                LabLoop ml = new LabLoop();
  ml.amethod();
                mainmethod:
                System.out.println("Continuing");
                }
        public void amethod(){
                outer:
                for(int i=0;i<2;i++){ 
                       for(int j=0;j<3;j++){
                           if(j>1)
                              break mainmethod;
                              System.out.println("i "+ i + " j "+j);
                    }
        }//End of outer for
  }
}
1)
i 0 j 0 i 0 j 1 Continuing
2)
i 0 j 0 i 0 j 1 i 1 j 0 i 1 j 1 Continuing
3)
Compile time error
4)
i 0 j 0 i 0 j 1 i 1 j 0 i 1 j 1 i 2 j 1
Continuing
What will happen when you attempt to compile and run the following code?
public void amethod(){
                outer:
                for(int i=0;i<2;i++){
                        for(int j=0;j<2;j++){
                             System.out.println("i="+i + " j= "+j);
                                        if(i >0)
                                             break outer;
                                }
             }
              System.out.println("Continuing with i set to ="+i);
       }
1) Compile time error
2)
i=0 j= 0 i=0 j= 1 i=1 j= 0
3)
i=0 j= 0 i=0 j= 1 i=1 j= 0 i=2 j= 0
4) i=0 j= 0 i=0 j= 1
Question 4)
What will happen when you attempt to compile and run the following code?
        int i=0;
        while(i>0){
                System.out.println("Value of i: "+i);
        }
                do{
                        System.out.println(i);
                        } while (i <2);
                }
1)
Value of i: 0
followed by
0 1 2
2)
0 1 2
3)
Value of i: 0
Followed by continuous output of 0
4) Continuous output of 0
 
  4) compile and run with output 0 to 4
  
  This is a strange but perfectly legal version of the for statement
 
  3) Compile time error
  
  You cannot arbitrarily jump to another method, this would bring back all the 
  evils manifest in the goto statement
 1) Compile time error
  
  This is not really a question about break and continue. This code 
  will not compile because the variable is no longer visible outside the for 
  loop. Thus the final System.out.println statement will cause a compile 
  time error.
 
  4) Continuous output of 0
  
  There is no increment of any value and a while loop will not execute at all 
  if its test is not true the on the first time around
| The Sun Tutorial http://java.sun.com/docs/books/tutorial/java/nutsandbolts/while.html Jyothi Krishnan http://www.geocities.com/SiliconValley/Network/3693/obj_sec2.html#obj6 Richard Baldwin http://www.Geocities.com/Athens/Acropolis/3797/Java026.htm#flow of control Bruce Eckel Thinking in Java http://codeguru.earthweb.com/java/tij/tij0045.shtml#Heading131 | 
Last updated
  28 Dec 1999
  copyright © Marcus Green 1999
  most recent version at www.jchq.net