/* Helene Martin, Garfield AP CS, 2010
   Demonstrates different nested loops.
*/

public class NestedLoops {
	public static void main(String[] args) {
		printRectangle2();
		multTable();
		triangle();
		numbersTriangle();
	}
	
	// Prints dots followed by the line number
	// Inner loop bound uses expression
	public static void numbersTriangle() {
		for(int line = 1; line <= 5; line++) {
			for(int j = 1; j <= line * -1 + 5; j++) {
				System.out.print(".");
			}
			System.out.println(i);
		}
	}
	
	// Prints a triangle of *
	// Inner loop counter bound uses outer counter
	public static void triangle() {
		for(int i = 1; i <= 5; i++) {
			for(int j = 1; j <= i; j++) {
				System.out.print("*");
			}
			System.out.println();
		}
	}
	
	// Prints a multiplication table
	// Loop body uses both loop conters
	public static void multTable() {
		for(int i = 1; i <= 5; i++) {
			for(int j = 1; j <= 5; j++) {
				System.out.print(i * j + "\t");
			}
			System.out.println();
		}
	}
	
	// Prints a rectangle of *
	// Loop counters must have different names
	public static void printRectangle2() {
		for(int i = 1; i <= 5; i++) {
			for(int j = 1; j <= 10; j++) {
				System.out.print("* ");
			}
			System.out.println();
		}
	}
	
	// Redundant!
	// Changing the size of the rectangle is error-prone
	public static void printRectangle1() {
		for(int i = 1; i <= 10; i++) {
			System.out.print("* ");
		}
		System.out.println();
		
		for(int i = 1; i <= 10; i++) {
			System.out.print("* ");
		}
		System.out.println();
		
		for(int i = 1; i <= 10; i++) {
			System.out.print("* ");
		}
		System.out.println();
		
		for(int i = 1; i <= 10; i++) {
			System.out.print("* ");
		}
		System.out.println();
		
		for(int i = 1; i <= 10; i++) {
			System.out.print("* ");
		}
		System.out.println();
	}
}
