Loops in Java
While Loop
A loop allows us to execute a block of statements multiple times. The following is a while loop printing out values from 0 to 9.
int i = 0; while (i < 10) { System.out.println(i); i++; }
When we run the code, the condition is first evaluated. If it is true, the body of the loop will be executed, and the condition is checked again; if the condition is false, the body is skipped.
The factorial function of a positive integer n is defined as
n! = n * (n-1) * … * 2 * 1.
Below is a class FactorialWhile which takes an input integer from command-line arguments and outputs its factorial.
public class FactorialWhile { public static void main(String[] args) { int num = Integer.parseInt(args[0]); long factorial = 1; int i = 1; while (i <= num) { factorial *= i; i++; } System.out.println(factorial); } }
Here args[0] refers to the first argument in the command line. For example, when we use the following command to run the program, args[0] stores the string “10”;
$java FactorialWhile 10
The method parseInt() of the class java.lang.Integer converts a string into an integer.
http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#parseInt(java.lang.String)
A loop can be defined in the body of another loop; this is called nested loop. The following example uses nested loops to print out lines of “*” in a triangle shape.
public class StarsWhile { public static void main (String[] args) { int rows = Integer.parseInt(args[0]); int i = 0, j = 0; while (i < rows) { j = 0; // Don’t miss this initialization while (j <= i) { System.out.print("*"); j++; } System.out.println(); i++; } } }
The program can be run using the following command:
$java StarsWhile 4
It will print out results as below.
* ** *** ****
For Loop
The following is a for loop printing out values from 0 to 9.
for (int i = 0; i < 10; i++) System.out.println(i);
The header of a for loop has three parts:
- initialization, executed once before the loop starts,
- boolean condition, evaluated in each iteration,
- increment, executed at the end of each iteration.
While loops and for loops can be converted to each other equivalently. The following class FactorialFor computes the factorial function.
public class FactorialFor { public static void main(String[] args) { int num = Integer.parseInt(args[0]); long factorial = 1; for (int i = 1; i <= num; i++) factorial *= i; System.out.println(factorial); } }
The following example uses nested for loops to print out stars in a triangle shape.
public class StarsFor { public static void main(String[] args) { int rows = Integer.parseInt(args[0]); for (int i = 0; i < rows; i++) { for (int j = 0; j <= i; j++) System.out.print("*"); System.out.println(); } } }