Control Flow
Loop Patterns
Common Iteration Techniques
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.
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.
Count down (countdown timer)
Looping in reverse order - start high, go low.
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.
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.
While with condition
Loop until some condition becomes false.
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.
Do-while (always runs once)
Sometimes you need to run the body at least once before checking.
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.
Exercise: InfinitePatterns.java
Explore intentional infinite loops and how to use them safely