Topic 5 For Loops and Nested Loops
Topic 5 For Loops and Nested Loops
int x = 2;
x++; // x = x + 1;
// x now stores 3
double gpa = 2.5;
gpa--; // gpa = gpa - 1;
// gpa now stores 1.5
Modify-and-assign operators
shortcuts to modify a variable's value
x += 3; // x = x + 3;
gpa -= 0.5; // gpa = gpa - 0.5;
number *= 2 + 1; // number = number * (2 + 1);
for loop is NOT a method
The for loop is a control structure—a syntactic
structure that controls the execution of other
statements.
Example:
– “Shampoo hair. Rinse. Repeat.”
Repetition over a range
System.out.println("1 squared = " + 1 * 1);
System.out.println("2 squared = " + 2 * 2);
System.out.println("3 squared = " + 3 * 3);
System.out.println("4 squared = " + 4 * 4);
System.out.println("5 squared = " + 5 * 5);
System.out.println("6 squared = " + 6 * 6);
Output: 2
1 squared = 1
2 squared = 4 3
3 squared = 9
4 squared = 16
Whoo! 4
5
Multi-line loop body
System.out.println("+----+");
for (int i = 1; i <= 3; i++) {
System.out.println("\\ /");
System.out.println("/ \\");
}
System.out.println("+----+");
Output:
+----+
\ /
/ \
\ /
/ \
\ /
/ \
+----+
Expressions for counter
int highTemp = 5;
for (int i = -3; i <= highTemp / 2; i++) {
System.out.println(i * 1.8 + 32);
}
– This computes the Fahrenheit equivalents for -3
degrees Celsius to 2 degrees Celsius.
Output:
26.6
28.4
30.2
32.0
33.8
35.6
System.out.print
Prints without moving to a new line
– allows you to print partial messages on the same line
int highestTemp = 5;
for (int i = -3; i <= highestTemp / 2; i++) {
System.out.print((i * 1.8 + 32) + " ");
}
• Output:
26.6 28.4 30.2 32.0 33.8 35.6
reading: 2.3
Nested loops
nested loop: A loop placed inside another loop.
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= 10; j++) {
System.out.print("*");
}
System.out.println(); // to end the line
}
Output:
**********
**********
**********
**********
**********
Output:
*
**
***
****
*****
Nested for loop exercise
What is the output of the following nested
for loops?
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(i);
}
System.out.println();
}
Output:
1
22
333
4444
55555
clicker Question
What is output by the following code?
int total = 0;
for(int i = 1; i <= 4; i++) {
for(int j = 1; j <= i; j++) {
total += i;
}
}
System.out.println(total);
A. 10 B. 20 C. 30 D. 40 E. 50
Common errors
Both of the following sets of code produce
infinite loops:
for (int i = 1; i <= 5; i++) {
for (int j = 1; i <= 10; j++) {
System.out.print("*");
}
System.out.println();
}
....1
...2
..3 outer loop (loops 5 times because there are 5 lines)
.4
5
20
1 2
15
10 2 7
5
3 12
0
-2 0 2 4 6
-5 4 17
-10
5 22
Another view: Slope-intercept
Caution: This is algebra, not assignment!
Recall: slope-intercept form (y = mx + b)
Slope is defined as “rise over run” (i.e. rise / run). Since the
“run” is always 1 (we increment along x by 1), we just need
to look at the “rise”. The rise is the difference between the y
values. Thus, the slope (m) is the difference between y
values; in this case, it is +5.
To compute the y-intercept (b), plug in the value of y at x =
1 and solve for b. In this case, y = 2.
y = m * x + b
2 = 5 * 1 + b count (x) number to print (y)
Then b = -3 1 2
So the equation is 2 7
y = m * x + b 3 12
y = 5 * x – 3
4 17
y = 5 * count - 3
5 22
Another view: Slope-intercept
Algebraically, if we always take the value of y at
x = 1, then we can solve for b as follows:
y = m * x + b
y1 = m * 1 + b
y1 = m + b
b = y1 – m
In other words, to get the y-intercept, just subtract
the slope from the first y value (b = 2 – 5 = -3)
– This gets us the equation
y = m * x + b
y = 5 * x – 3
y = 5 * count – 3
(which is exactly the equation from the previous slides)
Nested for loop exercise
Make a table to represent any patterns on each line.
....1
...2 line # of dots -1 * line -1 * line + 5
..3 1 4 -1 4
.4 2 3 -2 3
5
3 2 -3 2
4 1 -4 1
5 0 -5 0
To print a character multiple times, use a for loop.
for (int j = 1; j <= 4; j++) {
System.out.print("."); // 4 dots
}
Nested for loop solution
Answer:
for (int line = 1; line <= 5; line++) {
for (int j = 1; j <= (-1 * line + 5); j++) {
System.out.print(".");
}
System.out.println(line);
}
Output:
....1
...2
..3
.4
5
Nested for loop exercise
What is the output of the following nested for loops?
for (int line = 1; line <= 5; line++) {
for (int j = 1; j <= (-1 * line + 5); j++) {
System.out.print(".");
}
for (int k = 1; k <= line; k++) {
System.out.print(line);
}
System.out.println();
}
Answer:
....1
...22
..333
.4444
55555
Nested for loop exercise
Modify the previous code to produce this output:
....1
...2.
..3..
.4...
5....
for (int line = 1; line <= 5; line++) {
for (int j = 1; j <= (-1 * line + 5); j++) {
System.out.print(".");
}
System.out.print(line);
for (int j = 1; j <= (line - 1); j++) {
System.out.print(".");
}
System.out.println();
}