You're grading 30 student exams. Instead of writing the same calculation 30 times, you use a loop: for each exam, calculate the percentage, record the grade. Same logic, applied to every item in your list.

Print each element

Visit every element in an array, one by one.

PrintAll.java
Replay: real traced execution (multi-file project)
public class PrintAll {
    public static void main(String[] args) {
        int[] nums = {10, 20, 30, 40, 50};

        System.out.println("nums=" + java.util.Arrays.toString(nums));
        for (int i = 0; i < nums.length; i++) {
            int x = nums[i];
        }
    }
}
  1. public static void main(String[] args)

    1public class PrintAll {2    public static void main(String[] args) {3        int[] nums = {10, 20, 30, 40, 50};4        5        System.out.println("nums=" + java.util.Arrays.toString(nums));6        for (int i = 0; i < nums.length; i++) {
    outputnums=[10, 20, 30, 40, 50]
  2. x ← 10

    pass 1 of 5
    5System.out.println("nums=" + java.util.Arrays.toString(nums));6for (int i0 = 0; i < nums.length5; i++) {7    int x→ 10 = nums[i]10;8}
    All 5 passes — pass 1 is the card above
    passinums[i]x
    101010
    212020
    323030
    434040
    545050

The loop runs once for each element. i is the index: 0, 1, 2, 3, 4.

for `for (init; condition; update)` - runs while condition is true.

Sum of an array

Add up all the numbers in an array.

Sum.java
Replay: real traced execution (multi-file project)
public class Sum {
    public static void main(String[] args) {
        int[] nums = {10, 20, 30, 40, 50};

        System.out.println("nums=" + java.util.Arrays.toString(nums));
        int sum = 0;
        for (int i = 0; i < nums.length; i++) {
            sum = sum + nums[i];
        }
    }
}
  1. sum ← 0

    1public class Sum {2    public static void main(String[] args) {3        int[] nums = {10, 20, 30, 40, 50};4        5        System.out.println("nums=" + java.util.Arrays.toString(nums));6        int sum→ 0 = 0;7        for (int i = 0; i < nums.length; i++) {
    outputnums=[10, 20, 30, 40, 50]
  2. sum ← 10

    pass 1 of 5
    6int sum = 0;7for (int i0 = 0; i < nums.length5; i++) {8    sum→ 10 = sum + nums[i]10;9}
    All 5 passes — pass 1 is the card above
    passinums[i]sum
    10100 10
    212010 30
    323030 60
    434060 100
    5450100 150

Start with sum = 0, then add each element one by one. This pattern is called an accumulator.

Count how many elements match

How many numbers are greater than 50?

Count.java
Replay: real traced execution (multi-file project)
public class Count {
    public static void main(String[] args) {
        int[] nums = {35, 72, 48, 91, 56, 23, 88};

        System.out.println("nums=" + java.util.Arrays.toString(nums));
        int count = 0;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] > 50) {
                count = count + 1;
            }
        }
    }
}
  1. count ← 0

    1public class Count {2    public static void main(String[] args) {3        int[] nums = {35, 72, 48, 91, 56, 23, 88};4        5        System.out.println("nums=" + java.util.Arrays.toString(nums));6        int count→ 0 = 0;7        for (int i = 0; i < nums.length; i++) {
    outputnums=[35, 72, 48, 91, 56, 23, 88]
  2. for (int i = 0; i < nums.length; i++)

    pass 1 of 7
    6int count = 0;7for (int i0 = 0; i < nums.length7; i++) {8    if (nums[i] > 50) {
    All 7 passes — pass 1 is the card above
    passi
    10
    21
    32
    43
    54
    65
    76
  3. count ← 1

    pass 1 of 4
    7for (int i = 0; i < nums.length; i++) {8    if (nums[i]72 > 50) {9        count→ 1 = count + 1;10    }
    All 4 passes — pass 1 is the card above
    passnums[i]icount
    17210 1
    29131 2
    35642 3
    48863 4

Use a counter variable, increment it when condition is met.

Fibonacci with a loop

Generate Fibonacci numbers using a loop instead of writing each line.

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

        fib[0] = 0;
        fib[1] = 1;

        for (int i = 2; i < n; i++) {
            fib[i] = fib[i - 1] + fib[i - 2];
        }

        System.out.println("fib=" + java.util.Arrays.toString(fib));
    }
}
public class Fibonacci {
    public static void main(String[] args) {
        int n = 5;
        int[] fib = new int[n];

        fib[0] = 0;
        fib[1] = 1;

        for (int i = 2; i < n; i++) {
            fib[i] = fib[i - 1] + fib[i - 2];
        }

        System.out.println("fib=" + java.util.Arrays.toString(fib));
    }
}
public class Fibonacci {
    public static void main(String[] args) {
        int n = 15;
        int[] fib = new int[n];

        fib[0] = 0;
        fib[1] = 1;

        for (int i = 2; i < n; i++) {
            fib[i] = fib[i - 1] + fib[i - 2];
        }

        System.out.println("fib=" + java.util.Arrays.toString(fib));
    }
}
  1. n ← 10, fib[1] ← 1

    1public class Fibonacci {2    public static void main(String[] args) {3        int n→ 10 = 10;  //@n=5, 154        int[] fib = new int[n];5        6        fib[0]0 = 0;7        fib[1]→ 1 = 1;
  2. fib[i] ← 1

    pass 1 of 8
    9for (int i2 = 2; i < n10; i++) {10    fib[i]→ 1 = fib[i - 1]1 + fib[i - 2]0;11}
    All 8 passes — pass 1 is the card above
    passifib[i - 1]fib[i - 2]fib[i]
    12100 1
    23110 2
    34210 3
    45320 5
    56530 8
    67850 13
    781380 21
    8921130 34
  3. System.out.println("fib=" + java.util.Arrays.toString(fib));

    13    System.out.println("fib=" + java.util.Arrays.toString(fib));14}
    outputfib=[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
  1. n ← 5, fib[1] ← 1

    1public class Fibonacci {2    public static void main(String[] args) {3        int n→ 5 = 5;4        int[] fib = new int[n];5        6        fib[0]0 = 0;7        fib[1]→ 1 = 1;
  2. fib[i] ← 1

    pass 1 of 3
    9for (int i2 = 2; i < n5; i++) {10    fib[i]→ 1 = fib[i - 1]1 + fib[i - 2]0;11}
    All 3 passes — pass 1 is the card above
    passifib[i - 1]fib[i - 2]fib[i]
    12100 1
    23110 2
    34210 3
  3. System.out.println("fib=" + java.util.Arrays.toString(fib));

    13    System.out.println("fib=" + java.util.Arrays.toString(fib));14}
    outputfib=[0, 1, 1, 2, 3]
  1. n ← 15, fib[1] ← 1

    1public class Fibonacci {2    public static void main(String[] args) {3        int n→ 15 = 15;4        int[] fib = new int[n];5        6        fib[0]0 = 0;7        fib[1]→ 1 = 1;
  2. fib[i] ← 1

    pass 1 of 13
    9for (int i2 = 2; i < n15; i++) {10    fib[i]→ 1 = fib[i - 1]1 + fib[i - 2]0;11}
    13 passes — pass 1 is the card above
    passifib[i - 1]fib[i - 2]fib[i]
    12100 1
    23110 2
    34210 3
    45320 5
    56530 8
    67850 13
    781380 21
    8921130 34
    91034210 55
    ⋯ 2 more passes ⋯
    1213144890 233
    13142331440 377
  3. System.out.println("fib=" + java.util.Arrays.toString(fib));

    13    System.out.println("fib=" + java.util.Arrays.toString(fib));14}
    outputfib=[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377]

The loop pattern: each element depends on the previous two. Loops let us express this once, then repeat it as many times as needed.

while `while (condition)` - another way to loop, checks condition before each iteration.