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.

example
CountUp.java
Replay: real traced execution (multi-file project)
public class CountUp {
    public static void main(String[] args) {
        int start = 1;
        int end = 10;

        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 = 0;
        int end = 10;

        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 = 5;
        int end = 10;

        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 = 1;
        int end = 5;

        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 = 1;
        int end = 20;

        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);
    }
}
  1. start ← 1, end ← 10

    1public class CountUp {2    public static void main(String[] args) {3        int start→ 1 = 1;   //@start=5, 04        int end→ 10 = 10;    //@end=5, 205        6        System.out.println("Counting from " + start1 + " to " + end10 + ":");7        for (int i = start; i <= end; i++) {
    outputCounting from 1 to 10:
  2. for (int i = start; i <= end; i++)

    pass 1 of 10
    6System.out.println("Counting from " + start + " to " + end + ":");7for (int i1 = start; i <= end10; i++) {8    System.out.println(i1);9}
    output1
    All 10 passes — pass 1 is the card above
    passi
    11
    22
    33
    44
    55
    66
    77
    88
    99
    1010
  3. sum ← 0

    11// Practical: sum numbers in range12int sum→ 0 = 0;13for (int i = 1; i <= 100; i++) {
  4. sum ← 1

    pass 1 of 100
    12int sum = 0;13for (int i1 = 1; i <= 100; i++) {14    sum→ 1 += i1;15}
    100 passes — pass 1 is the card above
    passisum
    110 1
    221 3
    333 6
    446 10
    5510 15
    6615 21
    7721 28
    8828 36
    9936 45
    ⋯ 89 more passes ⋯
    99994851 4950
    1001004950 5050
  5. System.out.println("Sum of 1-100: " + sum);

    15    }16    System.out.println("Sum of 1-100: " + sum5050);17}
    outputSum of 1-100: 5050
  1. start ← 0, end ← 10

    1public class CountUp {2    public static void main(String[] args) {3        int start→ 0 = 0;4        int end→ 10 = 10;5        6        System.out.println("Counting from " + start0 + " to " + end10 + ":");7        for (int i = start; i <= end; i++) {
    outputCounting from 0 to 10:
  2. for (int i = start; i <= end; i++)

    pass 1 of 11
    6System.out.println("Counting from " + start + " to " + end + ":");7for (int i0 = start; i <= end10; i++) {8    System.out.println(i0);9}
    output0
    All 11 passes — pass 1 is the card above
    passi
    10
    21
    32
    43
    54
    65
    76
    87
    98
    109
    1110
  3. sum ← 0

    11// Practical: sum numbers in range12int sum→ 0 = 0;13for (int i = 1; i <= 100; i++) {
  4. sum ← 1

    pass 1 of 100
    12int sum = 0;13for (int i1 = 1; i <= 100; i++) {14    sum→ 1 += i1;15}
    100 passes — pass 1 is the card above
    passisum
    110 1
    221 3
    333 6
    446 10
    5510 15
    6615 21
    7721 28
    8828 36
    9936 45
    ⋯ 89 more passes ⋯
    99994851 4950
    1001004950 5050
  5. System.out.println("Sum of 1-100: " + sum);

    15    }16    System.out.println("Sum of 1-100: " + sum5050);17}
    outputSum of 1-100: 5050
  1. start ← 5, end ← 10

    1public class CountUp {2    public static void main(String[] args) {3        int start→ 5 = 5;4        int end→ 10 = 10;5        6        System.out.println("Counting from " + start5 + " to " + end10 + ":");7        for (int i = start; i <= end; i++) {
    outputCounting from 5 to 10:
  2. for (int i = start; i <= end; i++)

    pass 1 of 6
    6System.out.println("Counting from " + start + " to " + end + ":");7for (int i5 = start; i <= end10; i++) {8    System.out.println(i5);9}
    output5
    All 6 passes — pass 1 is the card above
    passi
    15
    26
    37
    48
    59
    610
  3. sum ← 0

    11// Practical: sum numbers in range12int sum→ 0 = 0;13for (int i = 1; i <= 100; i++) {
  4. sum ← 1

    pass 1 of 100
    12int sum = 0;13for (int i1 = 1; i <= 100; i++) {14    sum→ 1 += i1;15}
    100 passes — pass 1 is the card above
    passisum
    110 1
    221 3
    333 6
    446 10
    5510 15
    6615 21
    7721 28
    8828 36
    9936 45
    ⋯ 89 more passes ⋯
    99994851 4950
    1001004950 5050
  5. System.out.println("Sum of 1-100: " + sum);

    15    }16    System.out.println("Sum of 1-100: " + sum5050);17}
    outputSum of 1-100: 5050
  1. start ← 1, end ← 5

    1public class CountUp {2    public static void main(String[] args) {3        int start→ 1 = 1;4        int end→ 5 = 5;5        6        System.out.println("Counting from " + start1 + " to " + end5 + ":");7        for (int i = start; i <= end; i++) {
    outputCounting from 1 to 5:
  2. for (int i = start; i <= end; i++)

    pass 1 of 5
    6System.out.println("Counting from " + start + " to " + end + ":");7for (int i1 = start; i <= end5; i++) {8    System.out.println(i1);9}
    output1
    All 5 passes — pass 1 is the card above
    passi
    11
    22
    33
    44
    55
  3. sum ← 0

    11// Practical: sum numbers in range12int sum→ 0 = 0;13for (int i = 1; i <= 100; i++) {
  4. sum ← 1

    pass 1 of 100
    12int sum = 0;13for (int i1 = 1; i <= 100; i++) {14    sum→ 1 += i1;15}
    100 passes — pass 1 is the card above
    passisum
    110 1
    221 3
    333 6
    446 10
    5510 15
    6615 21
    7721 28
    8828 36
    9936 45
    ⋯ 89 more passes ⋯
    99994851 4950
    1001004950 5050
  5. System.out.println("Sum of 1-100: " + sum);

    15    }16    System.out.println("Sum of 1-100: " + sum5050);17}
    outputSum of 1-100: 5050
  1. start ← 1, end ← 20

    1public class CountUp {2    public static void main(String[] args) {3        int start→ 1 = 1;4        int end→ 20 = 20;5        6        System.out.println("Counting from " + start1 + " to " + end20 + ":");7        for (int i = start; i <= end; i++) {
    outputCounting from 1 to 20:
  2. for (int i = start; i <= end; i++)

    pass 1 of 20
    6System.out.println("Counting from " + start + " to " + end + ":");7for (int i1 = start; i <= end20; i++) {8    System.out.println(i1);9}
    output1
    20 passes — pass 1 is the card above
    passi
    11
    22
    33
    44
    55
    66
    77
    88
    99
    ⋯ 9 more passes ⋯
    1919
    2020
  3. sum ← 0

    11// Practical: sum numbers in range12int sum→ 0 = 0;13for (int i = 1; i <= 100; i++) {
  4. sum ← 1

    pass 1 of 100
    12int sum = 0;13for (int i1 = 1; i <= 100; i++) {14    sum→ 1 += i1;15}
    100 passes — pass 1 is the card above
    passisum
    110 1
    221 3
    333 6
    446 10
    5510 15
    6615 21
    7721 28
    8828 36
    9936 45
    ⋯ 89 more passes ⋯
    99994851 4950
    1001004950 5050
  5. System.out.println("Sum of 1-100: " + sum);

    15    }16    System.out.println("Sum of 1-100: " + sum5050);17}
    outputSum of 1-100: 5050

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.

start
CountDown.java
Replay: real traced execution (multi-file project)
public class CountDown {
    public static void main(String[] args) {
        int start = 10;

        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 = 3;

        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 = 5;

        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]);
        }
    }
}
  1. start ← 10

    1public class CountDown {2    public static void main(String[] args) {3        int start→ 10 = 10;  //@start=5, 34        5        System.out.println("Countdown from " + start10 + ":");6        for (int i = start; i >= 1; i--) {
    outputCountdown from 10:
  2. for (int i = start; i >= 1; i--)

    pass 1 of 10
    5System.out.println("Countdown from " + start + ":");6for (int i10 = start; i >= 1; i--) {7    System.out.println(i10);8}
    output10
    All 10 passes — pass 1 is the card above
    passi
    110
    29
    38
    47
    56
    65
    74
    83
    92
    101
  3. int[] arr = {10, 20, 30, 40, 50};

    8}9System.out.println("Liftoff!");1011// Practical: reverse array traversal12int[] arr = {10, 20, 30, 40, 50};13System.out.println("\nArray in reverse:");14for (int i = arr.length - 1; i >= 0; i--) {
    outputLiftoff!
    
    Array in reverse:
  4. for (int i = arr.length - 1; i >= 0; i--)

    pass 1 of 5
    13System.out.println("\nArray in reverse:");14for (int i4 = arr.length5 - 1; i >= 0; i--) {15    System.out.println("Index " + i4 + ": " + arr[i]50);16}
    outputIndex 4: 50
    All 5 passes — pass 1 is the card above
    passiarr[i]
    1450
    2340
    3230
    4120
    5010
  1. start ← 3

    1public class CountDown {2    public static void main(String[] args) {3        int start→ 3 = 3;4        5        System.out.println("Countdown from " + start3 + ":");6        for (int i = start; i >= 1; i--) {
    outputCountdown from 3:
  2. for (int i = start; i >= 1; i--)

    pass 1 of 3
    5System.out.println("Countdown from " + start + ":");6for (int i3 = start; i >= 1; i--) {7    System.out.println(i3);8}
    output3
    All 3 passes — pass 1 is the card above
    passi
    13
    22
    31
  3. int[] arr = {10, 20, 30, 40, 50};

    8}9System.out.println("Liftoff!");1011// Practical: reverse array traversal12int[] arr = {10, 20, 30, 40, 50};13System.out.println("\nArray in reverse:");14for (int i = arr.length - 1; i >= 0; i--) {
    outputLiftoff!
    
    Array in reverse:
  4. for (int i = arr.length - 1; i >= 0; i--)

    pass 1 of 5
    13System.out.println("\nArray in reverse:");14for (int i4 = arr.length5 - 1; i >= 0; i--) {15    System.out.println("Index " + i4 + ": " + arr[i]50);16}
    outputIndex 4: 50
    All 5 passes — pass 1 is the card above
    passiarr[i]
    1450
    2340
    3230
    4120
    5010
  1. start ← 5

    1public class CountDown {2    public static void main(String[] args) {3        int start→ 5 = 5;4        5        System.out.println("Countdown from " + start5 + ":");6        for (int i = start; i >= 1; i--) {
    outputCountdown from 5:
  2. for (int i = start; i >= 1; i--)

    pass 1 of 5
    5System.out.println("Countdown from " + start + ":");6for (int i5 = start; i >= 1; i--) {7    System.out.println(i5);8}
    output5
    All 5 passes — pass 1 is the card above
    passi
    15
    24
    33
    42
    51
  3. int[] arr = {10, 20, 30, 40, 50};

    8}9System.out.println("Liftoff!");1011// Practical: reverse array traversal12int[] arr = {10, 20, 30, 40, 50};13System.out.println("\nArray in reverse:");14for (int i = arr.length - 1; i >= 0; i--) {
    outputLiftoff!
    
    Array in reverse:
  4. for (int i = arr.length - 1; i >= 0; i--)

    pass 1 of 5
    13System.out.println("\nArray in reverse:");14for (int i4 = arr.length5 - 1; i >= 0; i--) {15    System.out.println("Index " + i4 + ": " + arr[i]50);16}
    outputIndex 4: 50
    All 5 passes — pass 1 is the card above
    passiarr[i]
    1450
    2340
    3230
    4120
    5010

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

Step by N (every nth element)

Skip elements by incrementing by more than 1.

step
StepByN.java
Replay: real traced execution (multi-file project)
public class StepByN {
    public static void main(String[] args) {
        int step = 5;

        // 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 = 2;

        // 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 = 10;

        // 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();
    }
}
  1. step ← 5

    1public class StepByN {2    public static void main(String[] args) {3        int step→ 5 = 5;  //@step=2, 104        5        // Count by step6        System.out.println("Counting by " + step5 + ":");7        for (int i = 0; i <= 50; i += step) {
    outputCounting by 5:
  2. for (int i = 0; i <= 50; i += step)

    pass 1 of 11
    6System.out.println("Counting by " + step + ":");7for (int i0 = 0; i <= 50; i += step5) {8    System.out.println(i0);9}
    output0
    All 11 passes — pass 1 is the card above
    passi
    10
    25
    310
    415
    520
    625
    730
    835
    940
    1045
    1150
  3. String[] names = {"Alice", "Bob", "Charlie", "Diana", "Eve", "Frank"};

    11// Practical: process every other element12String[] names = {"Alice", "Bob", "Charlie", "Diana", "Eve", "Frank"};13System.out.println("\nEvery other name:");14for (int i = 0; i < names.length; i += 2) {
    output
    Every other name:
  4. for (int i = 0; i < names.length; i += 2)

    pass 1 of 3
    13System.out.println("\nEvery other name:");14for (int i0 = 0; i < names.length6; i += 2) {15    System.out.println(names[i]Alice);16}
    outputAlice
    All 3 passes — pass 1 is the card above
    passinames[i]
    10Alice
    22Charlie
    34Eve
  5. System.out.println(" Odd numbers 1-20:");

    18// Odd numbers only19System.out.println("\nOdd numbers 1-20:");20for (int i = 1; i <= 20; i += 2) {
    output
    Odd numbers 1-20:
  6. for (int i = 1; i <= 20; i += 2)

    pass 1 of 10
    19System.out.println("\nOdd numbers 1-20:");20for (int i1 = 1; i <= 20; i += 2) {21    System.out.print(i1 + " ");22}
    output1 
    All 10 passes — pass 1 is the card above
    passi
    11
    23
    35
    47
    59
    611
    713
    815
    917
    1019
  7. System.out.println();

    22    }23    System.out.println();24}
  1. step ← 2

    1public class StepByN {2    public static void main(String[] args) {3        int step→ 2 = 2;4        5        // Count by step6        System.out.println("Counting by " + step2 + ":");7        for (int i = 0; i <= 50; i += step) {
    outputCounting by 2:
  2. for (int i = 0; i <= 50; i += step)

    pass 1 of 26
    6System.out.println("Counting by " + step + ":");7for (int i0 = 0; i <= 50; i += step2) {8    System.out.println(i0);9}
    output0
    26 passes — pass 1 is the card above
    passi
    10
    22
    34
    46
    58
    610
    712
    814
    916
    ⋯ 15 more passes ⋯
    2548
    2650
  3. String[] names = {"Alice", "Bob", "Charlie", "Diana", "Eve", "Frank"};

    11// Practical: process every other element12String[] names = {"Alice", "Bob", "Charlie", "Diana", "Eve", "Frank"};13System.out.println("\nEvery other name:");14for (int i = 0; i < names.length; i += 2) {
    output
    Every other name:
  4. for (int i = 0; i < names.length; i += 2)

    pass 1 of 3
    13System.out.println("\nEvery other name:");14for (int i0 = 0; i < names.length6; i += 2) {15    System.out.println(names[i]Alice);16}
    outputAlice
    All 3 passes — pass 1 is the card above
    passinames[i]
    10Alice
    22Charlie
    34Eve
  5. System.out.println(" Odd numbers 1-20:");

    18// Odd numbers only19System.out.println("\nOdd numbers 1-20:");20for (int i = 1; i <= 20; i += 2) {
    output
    Odd numbers 1-20:
  6. for (int i = 1; i <= 20; i += 2)

    pass 1 of 10
    19System.out.println("\nOdd numbers 1-20:");20for (int i1 = 1; i <= 20; i += 2) {21    System.out.print(i1 + " ");22}
    output1 
    All 10 passes — pass 1 is the card above
    passi
    11
    23
    35
    47
    59
    611
    713
    815
    917
    1019
  7. System.out.println();

    22    }23    System.out.println();24}
  1. step ← 10

    1public class StepByN {2    public static void main(String[] args) {3        int step→ 10 = 10;4        5        // Count by step6        System.out.println("Counting by " + step10 + ":");7        for (int i = 0; i <= 50; i += step) {
    outputCounting by 10:
  2. for (int i = 0; i <= 50; i += step)

    pass 1 of 6
    6System.out.println("Counting by " + step + ":");7for (int i0 = 0; i <= 50; i += step10) {8    System.out.println(i0);9}
    output0
    All 6 passes — pass 1 is the card above
    passi
    10
    210
    320
    430
    540
    650
  3. String[] names = {"Alice", "Bob", "Charlie", "Diana", "Eve", "Frank"};

    11// Practical: process every other element12String[] names = {"Alice", "Bob", "Charlie", "Diana", "Eve", "Frank"};13System.out.println("\nEvery other name:");14for (int i = 0; i < names.length; i += 2) {
    output
    Every other name:
  4. for (int i = 0; i < names.length; i += 2)

    pass 1 of 3
    13System.out.println("\nEvery other name:");14for (int i0 = 0; i < names.length6; i += 2) {15    System.out.println(names[i]Alice);16}
    outputAlice
    All 3 passes — pass 1 is the card above
    passinames[i]
    10Alice
    22Charlie
    34Eve
  5. System.out.println(" Odd numbers 1-20:");

    18// Odd numbers only19System.out.println("\nOdd numbers 1-20:");20for (int i = 1; i <= 20; i += 2) {
    output
    Odd numbers 1-20:
  6. for (int i = 1; i <= 20; i += 2)

    pass 1 of 10
    19System.out.println("\nOdd numbers 1-20:");20for (int i1 = 1; i <= 20; i += 2) {21    System.out.print(i1 + " ");22}
    output1 
    All 10 passes — pass 1 is the card above
    passi
    11
    23
    35
    47
    59
    611
    713
    815
    917
    1019
  7. System.out.println();

    22    }23    System.out.println();24}

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.

secret
WhileCondition.java
Replay: real traced execution (multi-file project)
public class WhileCondition {
    public static void main(String[] args) {
        // Guessing game simulation
        int secret = 7;
        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 = 3;
        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 = 9;
        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);

    }
}
  1. secret ← 7, guess ← 1, attempts ← 0

    1public class WhileCondition {2    public static void main(String[] args) {3        // Guessing game simulation4        int secret→ 7 = 7;    //@secret=3, 95        int guess→ 1 = 1;6        int attempts→ 0 = 0;
  2. guess ← 2, attempts ← 1

    pass 1 of 6
    8while (guess1 != secret7) {  //#?while_condition9    System.out.println("Trying " + guess1 + "... wrong!");10    guess→ 2++;11    attempts→ 1++;12}
    outputTrying 1... wrong!
    All 6 passes — pass 1 is the card above
    passguessattempts
    11 20 1
    22 31 2
    33 42 3
    44 53 4
    55 64 5
    66 75 6
  3. i ← 0, sum ← 0

    12}13System.out.println("Found " + secret7 + " in " + attempts6 + " attempts!");1415// Practical: process until sentinel value16int[] data = {10, 20, 30, -1, 40, 50};  // -1 is sentinel17int i→ 0 = 0;18int sum→ 0 = 0;1920System.out.println("\nSum until -1:");21while (i < data.length && data[i] != -1) {
    outputFound 7 in 6 attempts!
    
    Sum until -1:
  4. sum ← 10, i ← 1

    pass 1 of 3
    20System.out.println("\nSum until -1:");21while (i0 < data.length6 && data[i]10 != -1) {22    sum→ 10 += data[i]10;23    i→ 1++;24}
    All 3 passes — pass 1 is the card above
    passdata[i]sumi
    1100 100 1
    22010 301 2
    33030 602 3
  5. System.out.println("Sum: " + sum);

    24}25System.out.println("Sum: " + sum60);
    outputSum: 60
  1. secret ← 3, guess ← 1, attempts ← 0

    1public class WhileCondition {2    public static void main(String[] args) {3        // Guessing game simulation4        int secret→ 3 = 3;5        int guess→ 1 = 1;6        int attempts→ 0 = 0;
  2. guess ← 2, attempts ← 1

    pass 1 of 2
    8while (guess1 != secret3) {9    System.out.println("Trying " + guess1 + "... wrong!");10    guess→ 2++;11    attempts→ 1++;12}
    outputTrying 1... wrong!
  3. guess ← 3, attempts ← 2

    pass 2 of 2
    8while (guess2 != secret3) {9    System.out.println("Trying " + guess2 + "... wrong!");10    guess→ 3++;11    attempts→ 2++;12}
    outputTrying 2... wrong!
  4. i ← 0, sum ← 0

    12}13System.out.println("Found " + secret3 + " in " + attempts2 + " attempts!");1415// Practical: process until sentinel value16int[] data = {10, 20, 30, -1, 40, 50};  // -1 is sentinel17int i→ 0 = 0;18int sum→ 0 = 0;1920System.out.println("\nSum until -1:");21while (i < data.length && data[i] != -1) {
    outputFound 3 in 2 attempts!
    
    Sum until -1:
  5. sum ← 10, i ← 1

    pass 1 of 3
    20System.out.println("\nSum until -1:");21while (i0 < data.length6 && data[i]10 != -1) {22    sum→ 10 += data[i]10;23    i→ 1++;24}
    All 3 passes — pass 1 is the card above
    passdata[i]sumi
    1100 100 1
    22010 301 2
    33030 602 3
  6. System.out.println("Sum: " + sum);

    24}25System.out.println("Sum: " + sum60);
    outputSum: 60
  1. secret ← 9, guess ← 1, attempts ← 0

    1public class WhileCondition {2    public static void main(String[] args) {3        // Guessing game simulation4        int secret→ 9 = 9;5        int guess→ 1 = 1;6        int attempts→ 0 = 0;
  2. guess ← 2, attempts ← 1

    pass 1 of 8
    8while (guess1 != secret9) {9    System.out.println("Trying " + guess1 + "... wrong!");10    guess→ 2++;11    attempts→ 1++;12}
    outputTrying 1... wrong!
    All 8 passes — pass 1 is the card above
    passguessattempts
    11 20 1
    22 31 2
    33 42 3
    44 53 4
    55 64 5
    66 75 6
    77 86 7
    88 97 8
  3. i ← 0, sum ← 0

    12}13System.out.println("Found " + secret9 + " in " + attempts8 + " attempts!");1415// Practical: process until sentinel value16int[] data = {10, 20, 30, -1, 40, 50};  // -1 is sentinel17int i→ 0 = 0;18int sum→ 0 = 0;1920System.out.println("\nSum until -1:");21while (i < data.length && data[i] != -1) {
    outputFound 9 in 8 attempts!
    
    Sum until -1:
  4. sum ← 10, i ← 1

    pass 1 of 3
    20System.out.println("\nSum until -1:");21while (i0 < data.length6 && data[i]10 != -1) {22    sum→ 10 += data[i]10;23    i→ 1++;24}
    All 3 passes — pass 1 is the card above
    passdata[i]sumi
    1100 100 1
    22010 301 2
    33030 602 3
  5. System.out.println("Sum: " + sum);

    24}25System.out.println("Sum: " + sum60);
    outputSum: 60

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
Replay: real traced execution (multi-file project)
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");

    }
}
  1. choice ← 0

    1public class DoWhile {2    public static void main(String[] args) {3        // Menu that shows at least once4        int choice→ 0 = 0;
  2. choice ← 3

    6do {7    System.out.println("=== Menu ===");8    System.out.println("1. Play");9    System.out.println("2. Settings");10    System.out.println("3. Exit");11    System.out.println("Choice: " + choice0);12    13    // Simulate getting input14    choice→ 3 = 3;  //#?simulate_input15} while (choice != 3);
    output=== Menu ===
    1. Play
    2. Settings
    3. Exit
    Choice: 0
  3. runLoop ← false

    17System.out.println("Goodbye!");1819// Difference: while vs do-while when condition is false20boolean runLoop→ false = false;2122System.out.println("\n=== while (runLoop=false) ===");23while (runLoop) {24    System.out.println("This never prints");25}26System.out.println("while skipped entirely");2728System.out.println("\n=== do-while (runLoop=false) ===");29do {
    outputGoodbye!
    
    === while (runLoop=false) ===
    while skipped entirely
    
    === do-while (runLoop=false) ===
  4. do

    28System.out.println("\n=== do-while (runLoop=false) ===");29do {30    System.out.println("This prints once!");31} while (runLoop);
    outputThis prints once!
  5. System.out.println("do-while executed once");

    31} while (runLoop);32System.out.println("do-while executed once");
    outputdo-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