A countdown timer needs to go 10, 9, 8... 1, 0. A report processes every 5th record for sampling. A game loop runs until the player quits. Each scenario uses a different loop pattern.

Count up (1 to 10)

The most basic loop pattern - counting from start to end.

CountUp.java
public class CountUp {
    public static void main(String[] args) {
        int start = ;
        int end = ;
        
        System.out.println("Counting from " + start + " to " + end + ":");
        for (int i = start; i <= end; i++) {
            System.out.println(i);
        }
        
        // Practical: sum numbers in range
        int sum = 0;
        for (int i = 1; i <= 100; i++) {
            sum += i;
        }
        System.out.println("Sum of 1-100: " + sum);
    }
}
public class CountUp {
    public static void main(String[] args) {
        int start = ;
        int end = ;
        
        System.out.println("Counting from " + start + " to " + end + ":");
        for (int i = start; i <= end; i++) {
            System.out.println(i);
        }
        
        // Practical: sum numbers in range
        int sum = 0;
        for (int i = 1; i <= 100; i++) {
            sum += i;
        }
        System.out.println("Sum of 1-100: " + sum);
    }
}
public class CountUp {
    public static void main(String[] args) {
        int start = ;
        int end = ;
        
        System.out.println("Counting from " + start + " to " + end + ":");
        for (int i = start; i <= end; i++) {
            System.out.println(i);
        }
        
        // Practical: sum numbers in range
        int sum = 0;
        for (int i = 1; i <= 100; i++) {
            sum += i;
        }
        System.out.println("Sum of 1-100: " + sum);
    }
}
public class CountUp {
    public static void main(String[] args) {
        int start = ;
        int end = ;
        
        System.out.println("Counting from " + start + " to " + end + ":");
        for (int i = start; i <= end; i++) {
            System.out.println(i);
        }
        
        // Practical: sum numbers in range
        int sum = 0;
        for (int i = 1; i <= 100; i++) {
            sum += i;
        }
        System.out.println("Sum of 1-100: " + sum);
    }
}
public class CountUp {
    public static void main(String[] args) {
        int start = ;
        int end = ;
        
        System.out.println("Counting from " + start + " to " + end + ":");
        for (int i = start; i <= end; i++) {
            System.out.println(i);
        }
        
        // Practical: sum numbers in range
        int sum = 0;
        for (int i = 1; i <= 100; i++) {
            sum += i;
        }
        System.out.println("Sum of 1-100: " + sum);
    }
}
public class CountUp {
    public static void main(String[] args) {
        int start = ;
        int end = ;
        
        System.out.println("Counting from " + start + " to " + end + ":");
        for (int i = start; i <= end; i++) {
            System.out.println(i);
        }
        
        // Practical: sum numbers in range
        int sum = 0;
        for (int i = 1; i <= 100; i++) {
            sum += i;
        }
        System.out.println("Sum of 1-100: " + sum);
    }
}
public class CountUp {
    public static void main(String[] args) {
        int start = ;
        int end = ;
        
        System.out.println("Counting from " + start + " to " + end + ":");
        for (int i = start; i <= end; i++) {
            System.out.println(i);
        }
        
        // Practical: sum numbers in range
        int sum = 0;
        for (int i = 1; i <= 100; i++) {
            sum += i;
        }
        System.out.println("Sum of 1-100: " + sum);
    }
}
public class CountUp {
    public static void main(String[] args) {
        int start = ;
        int end = ;
        
        System.out.println("Counting from " + start + " to " + end + ":");
        for (int i = start; i <= end; i++) {
            System.out.println(i);
        }
        
        // Practical: sum numbers in range
        int sum = 0;
        for (int i = 1; i <= 100; i++) {
            sum += i;
        }
        System.out.println("Sum of 1-100: " + sum);
    }
}
public class CountUp {
    public static void main(String[] args) {
        int start = ;
        int end = ;
        
        System.out.println("Counting from " + start + " to " + end + ":");
        for (int i = start; i <= end; i++) {
            System.out.println(i);
        }
        
        // Practical: sum numbers in range
        int sum = 0;
        for (int i = 1; i <= 100; i++) {
            sum += i;
        }
        System.out.println("Sum of 1-100: " + sum);
    }
}

The classic counting loop. Change the bounds to count any range.

for Count-controlled loop: known number of iterations.

Count down (countdown timer)

Looping in reverse order - start high, go low.

CountDown.java
public class CountDown {
    public static void main(String[] args) {
        int start = ;
        
        System.out.println("Countdown from " + start + ":");
        for (int i = start; i >= 1; i--) {
            System.out.println(i);
        }
        System.out.println("Liftoff!");
        
        // Practical: reverse array traversal
        int[] arr = {10, 20, 30, 40, 50};
        System.out.println("\nArray in reverse:");
        for (int i = arr.length - 1; i >= 0; i--) {
            System.out.println("Index " + i + ": " + arr[i]);
        }
    }
}
public class CountDown {
    public static void main(String[] args) {
        int start = ;
        
        System.out.println("Countdown from " + start + ":");
        for (int i = start; i >= 1; i--) {
            System.out.println(i);
        }
        System.out.println("Liftoff!");
        
        // Practical: reverse array traversal
        int[] arr = {10, 20, 30, 40, 50};
        System.out.println("\nArray in reverse:");
        for (int i = arr.length - 1; i >= 0; i--) {
            System.out.println("Index " + i + ": " + arr[i]);
        }
    }
}
public class CountDown {
    public static void main(String[] args) {
        int start = ;
        
        System.out.println("Countdown from " + start + ":");
        for (int i = start; i >= 1; i--) {
            System.out.println(i);
        }
        System.out.println("Liftoff!");
        
        // Practical: reverse array traversal
        int[] arr = {10, 20, 30, 40, 50};
        System.out.println("\nArray in reverse:");
        for (int i = arr.length - 1; i >= 0; i--) {
            System.out.println("Index " + i + ": " + arr[i]);
        }
    }
}

Decrement with i-- and check i >= end to count backwards.

Step by N (every nth element)

Skip elements by incrementing by more than 1.

StepByN.java
public class StepByN {
    public static void main(String[] args) {
        int step = ;
        
        // Count by step
        System.out.println("Counting by " + step + ":");
        for (int i = 0; i <= 50; i += step) {
            System.out.println(i);
        }
        
        // Practical: process every other element
        String[] names = {"Alice", "Bob", "Charlie", "Diana", "Eve", "Frank"};
        System.out.println("\nEvery other name:");
        for (int i = 0; i < names.length; i += 2) {
            System.out.println(names[i]);
        }
        
        // Odd numbers only
        System.out.println("\nOdd numbers 1-20:");
        for (int i = 1; i <= 20; i += 2) {
            System.out.print(i + " ");
        }
        System.out.println();
    }
}
public class StepByN {
    public static void main(String[] args) {
        int step = ;
        
        // Count by step
        System.out.println("Counting by " + step + ":");
        for (int i = 0; i <= 50; i += step) {
            System.out.println(i);
        }
        
        // Practical: process every other element
        String[] names = {"Alice", "Bob", "Charlie", "Diana", "Eve", "Frank"};
        System.out.println("\nEvery other name:");
        for (int i = 0; i < names.length; i += 2) {
            System.out.println(names[i]);
        }
        
        // Odd numbers only
        System.out.println("\nOdd numbers 1-20:");
        for (int i = 1; i <= 20; i += 2) {
            System.out.print(i + " ");
        }
        System.out.println();
    }
}
public class StepByN {
    public static void main(String[] args) {
        int step = ;
        
        // Count by step
        System.out.println("Counting by " + step + ":");
        for (int i = 0; i <= 50; i += step) {
            System.out.println(i);
        }
        
        // Practical: process every other element
        String[] names = {"Alice", "Bob", "Charlie", "Diana", "Eve", "Frank"};
        System.out.println("\nEvery other name:");
        for (int i = 0; i < names.length; i += 2) {
            System.out.println(names[i]);
        }
        
        // Odd numbers only
        System.out.println("\nOdd numbers 1-20:");
        for (int i = 1; i <= 20; i += 2) {
            System.out.print(i + " ");
        }
        System.out.println();
    }
}

Change the step size to process every 2nd, 5th, or nth element.

step How much to increment each iteration: `i++`, `i += 2`, `i += 5`

While with condition

Loop until some condition becomes false.

WhileCondition.java
public class WhileCondition {
    public static void main(String[] args) {
        // Guessing game simulation
        int secret = ;
        int guess = 1;
        int attempts = 0;
        
        while (guess != secret) {
            System.out.println("Trying " + guess + "... wrong!");
            guess++;
            attempts++;
        }
        System.out.println("Found " + secret + " in " + attempts + " attempts!");
        
        // Practical: process until sentinel value
        int[] data = {10, 20, 30, -1, 40, 50};  // -1 is sentinel
        int i = 0;
        int sum = 0;
        
        System.out.println("\nSum until -1:");
        while (i < data.length && data[i] != -1) {
            sum += data[i];
            i++;
        }
        System.out.println("Sum: " + sum);
        
    }
}
public class WhileCondition {
    public static void main(String[] args) {
        // Guessing game simulation
        int secret = ;
        int guess = 1;
        int attempts = 0;
        
        while (guess != secret) {
            System.out.println("Trying " + guess + "... wrong!");
            guess++;
            attempts++;
        }
        System.out.println("Found " + secret + " in " + attempts + " attempts!");
        
        // Practical: process until sentinel value
        int[] data = {10, 20, 30, -1, 40, 50};  // -1 is sentinel
        int i = 0;
        int sum = 0;
        
        System.out.println("\nSum until -1:");
        while (i < data.length && data[i] != -1) {
            sum += data[i];
            i++;
        }
        System.out.println("Sum: " + sum);
        
    }
}
public class WhileCondition {
    public static void main(String[] args) {
        // Guessing game simulation
        int secret = ;
        int guess = 1;
        int attempts = 0;
        
        while (guess != secret) {
            System.out.println("Trying " + guess + "... wrong!");
            guess++;
            attempts++;
        }
        System.out.println("Found " + secret + " in " + attempts + " attempts!");
        
        // Practical: process until sentinel value
        int[] data = {10, 20, 30, -1, 40, 50};  // -1 is sentinel
        int i = 0;
        int sum = 0;
        
        System.out.println("\nSum until -1:");
        while (i < data.length && data[i] != -1) {
            sum += data[i];
            i++;
        }
        System.out.println("Sum: " + sum);
        
    }
}

Use while when you don't know how many iterations ahead of time.

while Condition-controlled loop: unknown iterations, check before each.

Do-while (always runs once)

Sometimes you need to run the body at least once before checking.

DoWhile.java
public class DoWhile {
    public static void main(String[] args) {
        // Menu that shows at least once
        int choice = 0;
        
        do {
            System.out.println("=== Menu ===");
            System.out.println("1. Play");
            System.out.println("2. Settings");
            System.out.println("3. Exit");
            System.out.println("Choice: " + choice);
            
            // Simulate getting input
            choice = 3;
        } while (choice != 3);
        
        System.out.println("Goodbye!");
        
        // Difference: while vs do-while when condition is false
        boolean runLoop = false;

        System.out.println("\n=== while (runLoop=false) ===");
        while (runLoop) {
            System.out.println("This never prints");
        }
        System.out.println("while skipped entirely");

        System.out.println("\n=== do-while (runLoop=false) ===");
        do {
            System.out.println("This prints once!");
        } while (runLoop);
        System.out.println("do-while executed once");
        
    }
}

do-while runs the body first, then checks the condition.

do-while Like while but checks AFTER running body (runs at least once).

Exercise: InfinitePatterns.java

Explore intentional infinite loops and how to use them safely