Foundations
Loops
Repeat Actions
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.
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];
}
}
}
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]x ← 10
pass 1 of 55System.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 pass inums[i]x1 0 10 10 2 1 20 20 3 2 30 30 4 3 40 40 5 4 50 50
The loop runs once for each element. i is the index: 0, 1, 2, 3, 4.
Sum of an array
Add up all the numbers in an array.
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];
}
}
}
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]sum ← 10
pass 1 of 56int 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 pass inums[i]sum1 0 10 0 → 10 2 1 20 10 → 30 3 2 30 30 → 60 4 3 40 60 → 100 5 4 50 100 → 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?
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;
}
}
}
}
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]for (int i = 0; i < nums.length; i++)
pass 1 of 76int count = 0;7for (int i0 = 0; i < nums.length7; i++) {8 if (nums[i] > 50) {All 7 passes — pass 1 is the card above pass i1 0 2 1 3 2 4 3 5 4 6 5 7 6 count ← 1
pass 1 of 47for (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 pass nums[i]icount1 72 1 0 → 1 2 91 3 1 → 2 3 56 4 2 → 3 4 88 6 3 → 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.
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));
}
}
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;fib[i] ← 1
pass 1 of 89for (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 pass ifib[i - 1]fib[i - 2]fib[i]1 2 1 0 0 → 1 2 3 1 1 0 → 2 3 4 2 1 0 → 3 4 5 3 2 0 → 5 5 6 5 3 0 → 8 6 7 8 5 0 → 13 7 8 13 8 0 → 21 8 9 21 13 0 → 34 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]
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;fib[i] ← 1
pass 1 of 39for (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 pass ifib[i - 1]fib[i - 2]fib[i]1 2 1 0 0 → 1 2 3 1 1 0 → 2 3 4 2 1 0 → 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]
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;fib[i] ← 1
pass 1 of 139for (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 pass ifib[i - 1]fib[i - 2]fib[i]1 2 1 0 0 → 1 2 3 1 1 0 → 2 3 4 2 1 0 → 3 4 5 3 2 0 → 5 5 6 5 3 0 → 8 6 7 8 5 0 → 13 7 8 13 8 0 → 21 8 9 21 13 0 → 34 9 10 34 21 0 → 55 ⋯ 2 more passes ⋯ 12 13 144 89 0 → 233 13 14 233 144 0 → 377 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.