Introduction
Imagine you're a teacher taking attendance. Instead of calling each student's name one by one manually, you have a system that automatically goes through the entire class list. For loops in Java do exactly this—they automatically repeat a set of actions a specific number of times, making them perfect for working with collections, arrays, or any repetitive task.
For loops are one of the most fundamental and powerful control structures in Java. They're your go-to tool when you know exactly how many times you want to repeat an action!
What is a For Loop?
A for loop is a control structure that repeats a block of code a specific number of times. It's like having a counter that automatically increments and controls how many times your code runs.
Key Characteristics:
- ✅ Definite iteration: Know exactly how many times it will run
- ✅ Three parts: Initialization, condition, and increment
- ✅ Counter-controlled: Uses a loop variable as a counter
- ✅ Versatile: Can count up, down, skip numbers, and more
Basic For Loop Syntax
for (initialization; condition; increment/decrement) {
// Code to repeat
}
Code Explanation with Examples
Example 1: Basic For Loop - Counting Up
public class BasicForLoop {
public static void main(String[] args) {
// Simple counting from 1 to 5
System.out.println("=== Counting 1 to 5 ===");
for (int i = 1; i <= 5; i++) {
System.out.println("Count: " + i);
}
// Counting from 0 to 4 (common in programming)
System.out.println("\n=== Counting 0 to 4 ===");
for (int i = 0; i < 5; i++) {
System.out.println("Index: " + i);
}
// With different increment
System.out.println("\n=== Counting by 2s ===");
for (int i = 2; i <= 10; i += 2) {
System.out.println("Even number: " + i);
}
}
}
Output:
=== Counting 1 to 5 === Count: 1 Count: 2 Count: 3 Count: 4 Count: 5 === Counting 0 to 4 === Index: 0 Index: 1 Index: 2 Index: 3 Index: 4 === Counting by 2s === Even number: 2 Even number: 4 Even number: 6 Even number: 8 Even number: 10
Example 2: Counting Down
public class CountingDown {
public static void main(String[] args) {
// Countdown from 10 to 1
System.out.println("=== Countdown ===");
for (int i = 10; i >= 1; i--) {
System.out.println(i + "...");
}
System.out.println("Blast off! 🚀");
// Counting down by 5s
System.out.println("\n=== Counting down by 5s ===");
for (int i = 50; i >= 0; i -= 5) {
System.out.println("Value: " + i);
}
// Reverse alphabet
System.out.println("\n=== Reverse Alphabet ===");
for (char letter = 'Z'; letter >= 'A'; letter--) {
System.out.print(letter + " ");
}
System.out.println(); // New line
}
}
Output:
=== Countdown === 10... 9... 8... 7... 6... 5... 4... 3... 2... 1... Blast off! 🚀 === Counting down by 5s === Value: 50 Value: 45 Value: 40 Value: 35 Value: 30 Value: 25 Value: 20 Value: 15 Value: 10 Value: 5 Value: 0 === Reverse Alphabet === Z Y X W V U T S R Q P O N M L K J I H G F E D C B A
Example 3: For Loop with Arrays
public class ArrayLooping {
public static void main(String[] args) {
// Array of student names
String[] students = {"Alice", "Bob", "Charlie", "Diana", "Eve"};
// Loop through array using index
System.out.println("=== Student Roster ===");
for (int i = 0; i < students.length; i++) {
System.out.println((i + 1) + ". " + students[i]);
}
// Array of test scores
int[] scores = {85, 92, 78, 96, 88};
// Calculate average score
int sum = 0;
for (int i = 0; i < scores.length; i++) {
sum += scores[i];
}
double average = (double) sum / scores.length;
System.out.println("\nAverage score: " + average);
// Find maximum score
int maxScore = scores[0];
for (int i = 1; i < scores.length; i++) {
if (scores[i] > maxScore) {
maxScore = scores[i];
}
}
System.out.println("Highest score: " + maxScore);
// Modify array elements
System.out.println("\n=== Bonus Points ===");
for (int i = 0; i < scores.length; i++) {
scores[i] += 5; // Add 5 bonus points to each score
System.out.println("Updated score " + (i + 1) + ": " + scores[i]);
}
}
}
Output:
=== Student Roster === 1. Alice 2. Bob 3. Charlie 4. Diana 5. Eve Average score: 87.8 Highest score: 96 === Bonus Points === Updated score 1: 90 Updated score 2: 97 Updated score 3: 83 Updated score 4: 101 Updated score 5: 93
Example 4: Nested For Loops
public class NestedLoops {
public static void main(String[] args) {
// Multiplication table
System.out.println("=== Multiplication Table (1-5) ===");
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= 5; j++) {
System.out.printf("%3d", i * j); // Format to 3 digits
}
System.out.println(); // New line after each row
}
// Pattern printing
System.out.println("\n=== Triangle Pattern ===");
for (int row = 1; row <= 5; row++) {
for (int col = 1; col <= row; col++) {
System.out.print("* ");
}
System.out.println();
}
// Coordinate system
System.out.println("\n=== Coordinate Grid ===");
for (int x = 0; x < 3; x++) {
for (int y = 0; y < 3; y++) {
System.out.println("Coordinate: (" + x + ", " + y + ")");
}
}
// 2D array processing
System.out.println("\n=== 2D Array ===");
int[][] matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(matrix[i][j] + " ");
}
System.out.println();
}
}
}
Output:
=== Multiplication Table (1-5) === 1 2 3 4 5 2 4 6 8 10 3 6 9 12 15 4 8 12 16 20 5 10 15 20 25 === Triangle Pattern === * * * * * * * * * * * * * * * === Coordinate Grid === Coordinate: (0, 0) Coordinate: (0, 1) Coordinate: (0, 2) Coordinate: (1, 0) Coordinate: (1, 1) Coordinate: (1, 2) Coordinate: (2, 0) Coordinate: (2, 1) Coordinate: (2, 2) === 2D Array === 1 2 3 4 5 6 7 8 9
Example 5: Enhanced For Loop (For-Each)
import java.util.*;
public class EnhancedForLoop {
public static void main(String[] args) {
// Array with enhanced for loop
String[] fruits = {"Apple", "Banana", "Orange", "Grape"};
System.out.println("=== Fruits (Enhanced For Loop) ===");
for (String fruit : fruits) {
System.out.println("I like " + fruit);
}
// ArrayList with enhanced for loop
List<Integer> numbers = Arrays.asList(10, 20, 30, 40, 50);
System.out.println("\n=== Numbers (ArrayList) ===");
int sum = 0;
for (int number : numbers) {
sum += number;
System.out.println("Number: " + number);
}
System.out.println("Total sum: " + sum);
// Set with enhanced for loop
Set<String> colors = new HashSet<>();
colors.add("Red");
colors.add("Green");
colors.add("Blue");
colors.add("Red"); // Duplicate - won't be added
System.out.println("\n=== Colors (Set) ===");
for (String color : colors) {
System.out.println("Color: " + color);
}
// Map with enhanced for loop
Map<String, Integer> ages = new HashMap<>();
ages.put("Alice", 25);
ages.put("Bob", 30);
ages.put("Charlie", 35);
System.out.println("\n=== Ages (Map - Keys) ===");
for (String name : ages.keySet()) {
System.out.println("Name: " + name);
}
System.out.println("\n=== Ages (Map - Values) ===");
for (int age : ages.values()) {
System.out.println("Age: " + age);
}
System.out.println("\n=== Ages (Map - Entries) ===");
for (Map.Entry<String, Integer> entry : ages.entrySet()) {
System.out.println(entry.getKey() + " is " + entry.getValue() + " years old");
}
}
}
Output:
=== Fruits (Enhanced For Loop) === I like Apple I like Banana I like Orange I like Grape === Numbers (ArrayList) === Number: 10 Number: 20 Number: 30 Number: 40 Number: 50 Total sum: 150 === Colors (Set) === Color: Red Color: Blue Color: Green === Ages (Map - Keys) === Name: Alice Name: Bob Name: Charlie === Ages (Map - Values) === Age: 25 Age: 30 Age: 35 === Ages (Map - Entries) === Alice is 25 years old Bob is 30 years old Charlie is 35 years old
Example 6: Loop Control Statements
public class LoopControl {
public static void main(String[] args) {
// break statement - exit loop early
System.out.println("=== Break Example ===");
for (int i = 1; i <= 10; i++) {
if (i == 6) {
System.out.println("Breaking at " + i);
break; // Exit loop immediately
}
System.out.println("Count: " + i);
}
// continue statement - skip current iteration
System.out.println("\n=== Continue Example (Skip even numbers) ===");
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) {
continue; // Skip even numbers
}
System.out.println("Odd number: " + i);
}
// Multiple conditions with logical operators
System.out.println("\n=== Multiple Conditions ===");
for (int i = 1; i <= 20; i++) {
if (i % 3 == 0 && i % 5 == 0) {
System.out.println(i + " - FizzBuzz");
} else if (i % 3 == 0) {
System.out.println(i + " - Fizz");
} else if (i % 5 == 0) {
System.out.println(i + " - Buzz");
} else {
System.out.println(i);
}
}
// Nested loops with labels and break
System.out.println("\n=== Labeled Break ===");
outerLoop: // Label for outer loop
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (i == 2 && j == 2) {
System.out.println("Breaking both loops at i=" + i + ", j=" + j);
break outerLoop; // Break out of both loops
}
System.out.println("i=" + i + ", j=" + j);
}
}
}
}
Output:
=== Break Example === Count: 1 Count: 2 Count: 3 Count: 4 Count: 5 Breaking at 6 === Continue Example (Skip even numbers) === Odd number: 1 Odd number: 3 Odd number: 5 Odd number: 7 Odd number: 9 === Multiple Conditions === 1 2 3 - Fizz 4 5 - Buzz 6 - Fizz 7 8 9 - Fizz 10 - Buzz 11 12 - Fizz 13 14 15 - FizzBuzz 16 17 18 - Fizz 19 20 - Buzz === Labeled Break === i=1, j=1 i=1, j=2 i=1, j=3 i=2, j=1 Breaking both loops at i=2, j=2
Example 7: Real-World Practical Examples
import java.util.*;
public class RealWorldExamples {
public static void main(String[] args) {
// 1. Student Grade Calculator
System.out.println("=== GRADE CALCULATOR ===");
int[] testScores = {85, 92, 78, 96, 88, 91};
char[] grades = new char[testScores.length];
for (int i = 0; i < testScores.length; i++) {
if (testScores[i] >= 90) grades[i] = 'A';
else if (testScores[i] >= 80) grades[i] = 'B';
else if (testScores[i] >= 70) grades[i] = 'C';
else if (testScores[i] >= 60) grades[i] = 'D';
else grades[i] = 'F';
System.out.println("Test " + (i + 1) + ": " + testScores[i] + " = " + grades[i]);
}
// 2. Shopping Cart Total
System.out.println("\n=== SHOPPING CART ===");
String[] items = {"Laptop", "Mouse", "Keyboard", "Monitor"};
double[] prices = {999.99, 29.99, 79.99, 249.99};
int[] quantities = {1, 2, 1, 1};
double total = 0;
for (int i = 0; i < items.length; i++) {
double itemTotal = prices[i] * quantities[i];
total += itemTotal;
System.out.printf("%-10s: $%6.2f x %d = $%7.2f%n",
items[i], prices[i], quantities[i], itemTotal);
}
System.out.printf("Total: $%.2f%n", total);
// 3. Password Strength Checker
System.out.println("\n=== PASSWORD CHECKER ===");
String password = "JavaRocks2024!";
boolean hasUpper = false, hasLower = false, hasDigit = false, hasSpecial = false;
for (int i = 0; i < password.length(); i++) {
char ch = password.charAt(i);
if (Character.isUpperCase(ch)) hasUpper = true;
else if (Character.isLowerCase(ch)) hasLower = true;
else if (Character.isDigit(ch)) hasDigit = true;
else hasSpecial = true;
}
System.out.println("Password: " + password);
System.out.println("Has uppercase: " + hasUpper);
System.out.println("Has lowercase: " + hasLower);
System.out.println("Has digit: " + hasDigit);
System.out.println("Has special: " + hasSpecial);
// 4. Temperature Conversion Table
System.out.println("\n=== TEMPERATURE CONVERSION ===");
System.out.println("Celsius\tFahrenheit");
for (int celsius = 0; celsius <= 100; celsius += 10) {
double fahrenheit = (celsius * 9.0/5.0) + 32;
System.out.printf("%d°C\t%.1f°F%n", celsius, fahrenheit);
}
}
}
Output:
=== GRADE CALCULATOR === Test 1: 85 = B Test 2: 92 = A Test 3: 78 = C Test 4: 96 = A Test 5: 88 = B Test 6: 91 = A === SHOPPING CART === Laptop : $999.99 x 1 = $ 999.99 Mouse : $ 29.99 x 2 = $ 59.98 Keyboard : $ 79.99 x 1 = $ 79.99 Monitor : $249.99 x 1 = $ 249.99 Total: $1389.95 === PASSWORD CHECKER === Password: JavaRocks2024! Has uppercase: true Has lowercase: true Has digit: true Has special: true === TEMPERATURE CONVERSION === Celsius Fahrenheit 0°C 32.0°F 10°C 50.0°F 20°C 68.0°F 30°C 86.0°F 40°C 104.0°F 50°C 122.0°F 60°C 140.0°F 70°C 158.0°F 80°C 176.0°F 90°C 194.0°F 100°C 212.0°F
Example 8: Common Pitfalls and Best Practices
public class PitfallsAndBestPractices {
public static void main(String[] args) {
// ❌ COMMON PITFALLS
// 1. Infinite loop (missing increment)
/*
for (int i = 0; i < 5;) { // Missing i++
System.out.println("This will run forever!");
}
*/
// 2. Off-by-one errors
int[] numbers = {1, 2, 3, 4, 5};
// ❌ Wrong: i <= numbers.length (causes ArrayIndexOutOfBoundsException)
for (int i = 0; i <= numbers.length; i++) {
// System.out.println(numbers[i]); // Crash on last iteration!
}
// ✅ Correct: i < numbers.length
for (int i = 0; i < numbers.length; i++) {
System.out.println("Correct: " + numbers[i]);
}
// 3. Modifying loop variable (usually bad practice)
System.out.println("\n=== Loop Variable Modification ===");
for (int i = 0; i < 10; i++) {
System.out.print(i + " ");
if (i == 5) {
i += 2; // Skipping numbers - confusing!
}
}
System.out.println();
// ✅ BEST PRACTICES
// 1. Use meaningful variable names
System.out.println("\n=== Meaningful Names ===");
for (int studentIndex = 0; studentIndex < 5; studentIndex++) {
System.out.println("Processing student #" + (studentIndex + 1));
}
// 2. Keep loop logic simple
System.out.println("\n=== Simple Logic ===");
for (int row = 0; row < 3; row++) {
for (int col = 0; col < 3; col++) {
// Simple, clear logic
int value = (row * 3) + col + 1;
System.out.print(value + " ");
}
System.out.println();
}
// 3. Prefer enhanced for loops for collections
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
// ✅ Better for readability
for (String name : names) {
System.out.println("Hello, " + name);
}
// ❌ Less readable
for (int i = 0; i < names.size(); i++) {
System.out.println("Hello, " + names.get(i));
}
// 4. Extract complex logic to methods
System.out.println("\n=== Extracted Logic ===");
for (int number = 1; number <= 10; number++) {
if (isPrime(number)) {
System.out.println(number + " is prime");
}
}
}
// Helper method for complex logic
public static boolean isPrime(int n) {
if (n <= 1) return false;
for (int i = 2; i <= Math.sqrt(n); i++) {
if (n % i == 0) return false;
}
return true;
}
}
Output:
Correct: 1 Correct: 2 Correct: 3 Correct: 4 Correct: 5 === Loop Variable Modification === 0 1 2 3 4 5 8 9 === Meaningful Names === Processing student #1 Processing student #2 Processing student #3 Processing student #4 Processing student #5 === Simple Logic === 1 2 3 4 5 6 7 8 9 Hello, Alice Hello, Bob Hello, Charlie Hello, Alice Hello, Bob Hello, Charlie === Extracted Logic === 2 is prime 3 is prime 5 is prime 7 is prime
For Loop Variations Summary
| Type | Syntax | Use Case |
|---|---|---|
| Basic For Loop | for (int i=0; i<n; i++) | Counting, array indexing |
| Enhanced For Loop | for (Type item : collection) | Collections, arrays (read-only) |
| Counting Down | for (int i=n; i>0; i--) | Reverse order, countdowns |
| Custom Increment | for (int i=0; i<n; i+=2) | Skip values, patterns |
| Nested Loops | for (...) { for (...) } | 2D arrays, grids, combinations |
| Infinite Loop | for (;;) | Server loops (with break condition) |
Best Practices
- Use meaningful variable names:
index,counter,row,col - Prefer enhanced for loops for simple iteration over collections
- Keep loop bodies small - extract complex logic to methods
- Avoid modifying the loop variable inside the loop body
- Use
breakandcontinuesparingly - they can make code harder to read - Always test edge cases - first iteration, last iteration, empty collections
- Consider performance with large datasets or nested loops
Conclusion
For loops are the workhorses of repetition in Java:
- ✅ Definite iteration: Perfect when you know how many times to repeat
- ✅ Flexible counting: Count up, down, skip numbers, any pattern
- ✅ Array/collection processing: Essential for working with data sets
- ✅ Nested capabilities: Handle multi-dimensional data
- ✅ Enhanced syntax: Clean iteration with for-each loops
Key Takeaways:
- Use basic for loops for counting and index-based access
- Use enhanced for loops for simple collection iteration
- Watch for off-by-one errors - test your boundary conditions
- Keep loops readable - complex logic belongs in methods
- Choose the right tool - for loops for definite repetition, while loops for indefinite
Mastering for loops is essential for any Java programmer—they're one of the most commonly used constructs in everyday coding!