Building Java
Programs
1
Modify-and-assign
operators
shortcuts to modify a variable's value
Shorthand Equivalent longer version
variable += value; variable = variable + value;
variable -= value; variable = variable - value;
variable *= value; variable = variable * value;
variable /= value; variable = variable / value;
variable %= value; variable = variable % value;
x += 3; // x = x + 3;
gpa -= 0.5; // gpa = gpa - 0.5;
number *= 2; // number = number * 2;
2
Increment and decrement
shortcuts to increase or decrease a variable's value
by 1
Shorthand Equivalent longer version
variable++; variable = variable + 1;
variable--; variable = variable - 1;
int x = 2;
x++; // x = x + 1; (or x += 1;
)
// x now stores 3
double gpa = 2.5;
gpa--; // gpa -= 1;
// gpa now stores 1.5
3
Repetition over a range
[Link](1 + " squared = " + 1 * 1);
[Link](2 + " squared = " + 2 * 2);
[Link](3 + " squared = " + 3 * 3);
[Link](4 + " squared = " + 4 * 4);
[Link](5 + " squared = " + 5 * 5);
[Link](6 + " squared = " + 6 * 6);
Intuition: "I want to print a line for each number
from 1 to 6"
There's a statement, the for loop, that does just
that!
for (int i = 1; i <= 6; i++) {
[Link](i + " squared = " + (i * i));
}
"For each integer i from 1 through 6, print ..."
4
for loop syntax
for (initialization; test; update) { header
statement;
statement;
... body
statement;
}
Perform initialization once.
Repeat the following:
Check if the test is true. If not, stop.
Execute the statements.
Perform the update.
5
Initialization
for (int i = 1; i <= 6; i++) {
[Link](i + " squared = " + (i * i));
}
Tells Java what variable to use in the loop
Called a loop counter
Can use any variable name, not just i
Can start at any value, not just 1
6
Test
for (int i = 1; i <= 6; i++) {
[Link](i + " squared = " + (i * i));
}
Tests whether the loop should stop
Typically uses comparison operators:
< less than
<= less than or equal to
> greater than
>= greater than or equal to
7
Update
for (int i = 1; i <= 6; i++) {
[Link](i + " squared = " + (i * i));
}
What to do after the loop body
Update the loop-counter variable appropriately
Without an update, you would have an infinite loop
Can be any expression:
for (int i = 1; i <= 9; i += 2) {
[Link](i);
}
8
Loop walkthrough
1 2 3
for (int i = 1; i <= 4; i++) {
4 [Link](i + " squared = " + (i * i));
}
5 [Link]("Whoo!");
1
Output:
2
1 squared = 1
2 squared = 4
3 squared = 9 4
4 squared = 16
Whoo! 3
9
General repetition
[Link]("I am so smart");
[Link]("I am so smart");
[Link]("I am so smart");
[Link]("I am so smart");
[Link]("I am so smart");
[Link]("S-M-R-T");
[Link]("I mean S-M-A-R-T");
The loop's body doesn't have to use the counter
variable:
for (int i = 1; i <= 5; i++) { // repeat 5 times
[Link]("I am so smart");
}
[Link]("S-M-R-T");
[Link]("I mean S-M-A-R-T");
10
Multi-line loop body
Output:
+----+
\ /
/ \
\ /
/ \
\ /
/ \
+----+
[Link]("+----+");
for (int i = 1; i <= 3; i++) {
[Link]("\\ /");
[Link]("/ \\");
}
[Link]("+----+");
11
Expressions for counter
int highTemp = 5;
for (int i = -3; i <= highTemp / 2; i++) {
[Link](i * 1.8 + 32);
}
Output:
26.6
28.4
30.2
32.0
33.8
35.6
12
[Link]
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++) {
[Link]((i * 1.8 + 32) + " ");
}
• Output:
26.6 28.4 30.2 32.0 33.8 35.6
13
Counting down
The update can use -- to make the loop count down.
Be sure to use the right test (> or >= instead of <
or <=)
[Link]("T-minus ");
for (int i = 10; i >= 1; i--) {
[Link](i + ", ");
}
[Link]("blastoff!");
Output:
T-minus 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, blastoff!
14
Where are we
Done: many basic features of Java
Static methods
int, double, and strings
Expressions: +, -, *, /, %, <, <=, >, >=
Variables
For loops
[Link] and [Link]
Many more features to come, but first how to use
for loops effectively
No new rules, just new programming patterns
And practice designing programs
For loops can nest (be inside other for loops)
15
Mapping loops to numbers
for (int count = 1; count <= 5; count++) {
...
}
What statement in the body would cause the loop to
print:
4 7 10 13 16
for (int count = 1; count <= 5; count++) {
[Link](3 * count + 1 + " ");
}
16
Loop tables
What statement in the body would cause the loop to
print:
2 7 12 17 22
To see patterns, make a table of count and the
numbers.
Each time count goes up by 1, the number should go
upcount
by 5.
number to 5 * count 5 * count -
But count * 5 is too great by 33, so we subtract 3.
print
5
1 2 2
10
2 7 7
15
3 12 12
20
4 17 17
25
5 22 22
17
Loop tables question
What statement in the body would cause the loop to
print:
17 13 9 5 1
• You try it…
Each time count goes up 1, the number printed should
...
But this multiple is off by a margin of ...
count number to -4 * count -4 * count + 21
print
-4 17
1 17
-8 13
2 13
-12 9
3 9
-16 5
4 5
-20 1
5 1
18
Nested loops
19
Redundancy between loops
for (int j = 1; j <= 5; j++) {
[Link](j + "\t"); Output:
} 1 2 3 4 5
[Link]();
2 4 6 8 10
for (int j = 1; j <= 5; j++) {
[Link](2 * j + "\t");
3 6 9 12 15
}
[Link]();
4 8 12 16 20
for (int j = 1; j <= 5; j++) {
[Link](3 * j + "\t");
}
[Link]();
for (int j = 1; j <= 5; j++) {
[Link](4 * j + "\t"){
}
[Link]();
20
Nested loops
nested loop: A loop placed inside another loop.
for (int i = 1; i <= 4; i++) {
for (int j = 1; j <= 5; j++) {
[Link]((i * j) + "\t");
}
[Link](); // to end the line
}
Output:
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
Statements in the outer loop's body are executed 4
times.
The inner loop prints 5 numbers each time it is run.
21
Nested for loop exercise
What is the output of the following nested for
loops?
for (int i = 1; i <= 6; i++) {
for (int j = 1; j <= 10; j++) {
[Link]("*");
}
[Link]();
}
Output:
**********
**********
**********
**********
**********
********** 22
Nested for loop exercise
What is the output of the following nested for
loops?
for (int i = 1; i <= 6; i++) {
for (int j = 1; j <= i; j++) {
[Link]("*");
}
[Link]();
}
Output:
*
**
***
****
*****
****** 23
Nested for loop exercise
What is the output of the following nested for
loops?
for (int i = 1; i <= 6; i++) {
for (int j = 1; j <= i; j++) {
[Link](i);
}
[Link]();
}
Output:
1
22
333
4444
55555
666666 24
Complex lines
What nested for loops produce the following
output?
eated characters on each line)
....1
...2
..3 outer loop (loops 5 times because there ar
.4
5
Can build multiple complex lines of output using:
an outer "vertical" loop for each of the lines
inner "horizontal" loop(s) for the patterns within
each line
25
Outer and inner loop
First write the outer loop, from 1 to the number
of lines.
for (int line = 1; line <= 5; line++) {
...
}
Now look at the line contents. Each line has a
pattern:
some dots (0 dots on the last line)
a number
....1
...2
..3
.4
5 26
Nested for loop exercise
Make a table to represent any patterns on each
line.
line # of -1 * line -1 * line + 5
....1 dots -1 4
...2 1 4 -2 3
..3 2 3 -3 2
.4 3 2 -4 1
5
4 1 -5 0
5 0
To print a character multiple times, use a for
loop.
for (int j = 1; j <= 4; j++) {
[Link]("."); // 4 dots
} 27
Nested for loop solution
Answer:
for (int line = 1; line <= 5; line++) {
for (int j = 1; j <= (-1 * line + 5); j++) {
[Link](".");
}
[Link](line);
}
Output:
....1
...2
..3
.4
5
28
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++) {
[Link](".");
}
for (int k = 1; k <= line; k++) {
[Link](line);
}
[Link]();
}
Answer:
....1
...22
..333
.4444
55555 29
Nested for loop exercise
Modify the previous code to produce this output:
....1
...2.
..3..
.4...
5....
Answer:
for (int line = 1; line <= 5; line++) {
for (int j = 1; j <= (-1 * line + 5); j++) {
[Link](".");
}
[Link](line);
for (int j = 1; j <= (line - 1); j++) {
[Link](".");
}
[Link]();
}
30
Common errors
Both of the following sets of code produce
infinite loops:
for (int i = 1; i <= 10; i++) {
for (int j = 1; i <= 5; j++) {
[Link](j);
}
[Link]();
}
for (int i = 1; i <= 10; i++) {
for (int j = 1; j <= 5; i++) {
[Link](j);
}
[Link]();
}
31