Topic5 For Loops Nested Loops
Topic5 For Loops Nested Loops
1
Repetition with for loops
So far, repeating a statement is redundant:
System.out.println("Mike says:");
System.out.println("Do Practice-It problems!");
System.out.println("Do Practice-It problems!");
System.out.println("Do Practice-It problems!");
System.out.println("Do Practice-It problems!");
System.out.println("Do Practice-It problems!");
System.out.println("It makes a HUGE difference.");
7
Aside: Increment and
Decrement Operators
shortcuts to increase or decrease a variable's value by 1
int x = 2;
x++; // x = x + 1;
// x now stores 3
double gpa = 2.5;
gpa--; // gpa = gpa - 1;
// gpa now stores 1.5
8
Aside: 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);
Clicker 1
What is output by the following code?
int x = 2;
int y = 5;
x *= 3 + y + x;
System.out.println(x + " " + y);
A. 20 5
B. 2 5
C. 13 5
D. 20 10
E. Something other than A - D 10
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.”
11
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
13
Simple Loop Example
Write a program to calculate and print out the
values of N! from 1 to 50 using a for loop
0! = 1
1! = 1 * 0! = 1 * 1 = 1
2! = 2 * 1! = 2 * 1 * 1 = 2
3! = 3 * 2! = 3 * 2 * 1 * 1 = 6
4! = 4 * 3! = 4 * 3 * 2 * 1 * 1 = 24
14
Multi-line loop body
System.out.println("+----+");
for (int i = 1; i <= 3; i++) {
System.out.println("\\ /");
System.out.println("/ \\");
}
System.out.println("+----+");
Output:
+----+
\ /
/ \
\ /
/ \
\ /
/ \
15
+----+
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
16
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
18
Counting down
The <update> can use -- to make the loop
count down.
– The <test> must say > instead of < (or logic error)
System.out.print("T-minus ");
for (int i = 10; i >= 1; i--) {
System.out.print(i + ", ");
}
System.out.println("blastoff!");
System.out.println("The end.");
Output:
T-minus 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, blastoff!
The end. 19
Practice Problem
Newton's method for approximating square roots
adapted from the Dr. Math website
The goal is to find the square root of a number. Let's call it num
1. Choose a rough approximation of the square root of num,
call it approx.
How to choose?
2. Divide num by approx and then average the quotient with
approx,
in other words we want to evaluate the
expression ((num/approx) + approx) / 2
3. How close are we? In programming we would store the result
of the expression back into the variable approx.
4. How do you know if you have the right answer?
20
Sample of Newton's Method
num approx ((num/approx)+approx)/2 approx*approx
12 6 (12 / 6 + 6) / 2 = 4 16
12 4 (12 / 4 + 4) / 2 = 3.5 12.25
12 3.5 (12 / 3.5 + 3.5) / 2 = 3.4642857… 12.0012..
12 3.4642857 = 3.46410162… 12.00000003
12 3.46410162 = 3.46410161… 11.999999999
21
Nested loops
reading: 2.3
22
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:
*
**
***
****
***** 24
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
25
55555
Clicker 3
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. 4 B. 10 C. 16 D. 24 E. 30
26
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
33
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 34
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)
35
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
}
36
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 37
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 38
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();
39
}