04 Slide
04 Slide
Motivations
Suppose that you need to print a string (e.g.,
"Welcome to Java!") a hundred times. It would be
tedious to have to write the following statement a
hundred times:
System.out.println("Welcome to Java!");
So, how do you solve this problem?
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
2
rights reserved.
Opening Problem
Problem:
100
times
System.out.println("Welcome
System.out.println("Welcome
System.out.println("Welcome
System.out.println("Welcome
System.out.println("Welcome
System.out.println("Welcome
to
to
to
to
to
to
Java!");
Java!");
Java!");
Java!");
Java!");
Java!");
System.out.println("Welcome to Java!");
System.out.println("Welcome to Java!");
System.out.println("Welcome to Java!");
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
3
rights reserved.
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
4
rights reserved.
Objectives
int count = 0;
while (count < 100) {
System.out.println("Welcome to Java!");
Statement(s);
count++;
}
count = 0;
Loop
Continuation
Condition?
true
Statement(s)
(loop body)
(A)
false
false
true
System.out.println("Welcome to Java!");
count++;
(B)
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
6
rights reserved.
animation
int count = 0;
Initialize count
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
7
rights reserved.
animation
int count = 0;
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
8
rights reserved.
animation
int count = 0;
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
9
rights reserved.
animation
int count = 0;
Increase count by 1
count is 1 now
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
10
rights reserved.
animation
int count = 0;
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
11
rights reserved.
animation
int count = 0;
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
12
rights reserved.
animation
int count = 0;
Increase count by 1
count is 2 now
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
13
rights reserved.
animation
int count = 0;
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
14
rights reserved.
animation
int count = 0;
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
15
rights reserved.
RepeatAdditionQuiz
Run
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
16
rights reserved.
Run
GuessNumber
Run
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
17
rights reserved.
SubtractionQuizLoop
Run
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
18
rights reserved.
Run
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
19
rights reserved.
Caution
Dont use floating-point values for equality checking in a
loop control. Since floating-point values are
approximations for some values, using them could result
in imprecise counter values and inaccurate results.
Consider the following code for computing 1 + 0.9 + 0.8
+ ... + 0.1:
double item = 1; double sum = 0;
while (item != 0) { // No guarantee item will be 0
sum += item;
item -= 0.1;
}
System.out.println(sum);
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
20
rights reserved.
do-while Loop
Statement(s)
(loop body)
true
do {
// Loop body;
Loop
Continuation
Condition?
false
Statement(s);
} while (loop-continuation-condition);
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
21
rights reserved.
for Loops
for (initial-action; loopcontinuation-condition;
action-after-each-iteration) {
// loop body;
Statement(s);
}
Initial-Action
Loop
Continuation
Condition?
int i;
for (i = 0; i < 100; i++) {
System.out.println(
"Welcome to Java!");
}
i=0
false
(i < 100)?
true
Statement(s)
(loop body)
true
System.out.println(
"Welcome to Java");
Action-After-Each-Iteration
i++
(A)
(B)
false
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
22
rights reserved.
animation
int i;
for (i = 0; i < 2; i++) {
System.out.println(
"Welcome to Java!");
}
Declare i
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
23
rights reserved.
animation
int i;
for (i = 0; i < 2; i++) {
System.out.println(
"Welcome to Java!");
}
Execute initializer
i is now 0
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
24
rights reserved.
animation
int i;
for (i = 0; i < 2; i++) {
System.out.println( "Welcome to Java!");
}
(i < 2) is true
since i is 0
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
25
rights reserved.
animation
int i;
for (i = 0; i < 2; i++) {
System.out.println("Welcome to Java!");
}
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
26
rights reserved.
animation
int i;
for (i = 0; i < 2; i++) {
System.out.println("Welcome to Java!");
}
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
27
rights reserved.
animation
int i;
for (i = 0; i < 2; i++) {
System.out.println("Welcome to Java!");
}
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
28
rights reserved.
animation
int i;
for (i = 0; i < 2; i++) {
System.out.println("Welcome to Java!");
}
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
29
rights reserved.
animation
int i;
for (i = 0; i < 2; i++) {
System.out.println("Welcome to Java!");
}
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
30
rights reserved.
animation
int i;
for (i = 0; i < 2; i++) {
System.out.println("Welcome to Java!");
}
(i < 2) is false
since i is 2
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
31
rights reserved.
animation
int i;
for (i = 0; i < 2; i++) {
System.out.println("Welcome to Java!");
}
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
32
rights reserved.
Note
The initial-action in a for loop can be a list of zero or more
comma-separated expressions. The action-after-eachiteration in a for loop can be a list of zero or more commaseparated statements. Therefore, the following two for
loops are correct. They are rarely used in practice,
however.
for (int i = 1; i < 100; System.out.println(i++));
for (int i = 0, j = 0; (i + j < 10); i++, j++) {
// Do something
}
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
33
rights reserved.
Note
If the loop-continuation-condition in a for loop is omitted,
it is implicitly true. Thus the statement given below in (a),
which is an infinite loop, is correct. Nevertheless, it is
better to use the equivalent loop in (b) to avoid confusion:
for ( ; ; ) {
// Do something
}
(a)
Equivalent
while (true) {
// Do something
}
(b)
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
34
rights reserved.
Caution
Adding a semicolon at the end of the for clause before
the loop body is a common mistake, as shown below:
Logic
Error
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
35
rights reserved.
Caution, cont.
Similarly, the following loop is also wrong:
int i=0;
Logic Error
while (i < 10);
{
System.out.println("i is " + i);
i++;
}
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
36
rights reserved.
Equivalent
for ( ; loop-continuation-condition; )
// Loop body
}
(a)
(b)
A for loop in (a) in the following figure can generally be converted into the
following while loop in (b) except in certain special cases (see Review Question
3.19 for one of them):
for (initial-action;
loop-continuation-condition;
action-after-each-iteration) {
// Loop body;
}
(a)
Equivalent
initial-action;
while (loop-continuation-condition) {
// Loop body;
action-after-each-iteration;
}
(b)
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
37
rights reserved.
Recommendations
Use the one that is most intuitive and comfortable for
you. In general, a for loop may be used if the number of
repetitions is known, as, for example, when you need to
print a message 100 times. A while loop may be used if
the number of repetitions is not known, as in the case of
reading the numbers until the input is 0. A do-while loop
can be used to replace a while loop if the loop body has to
be executed before testing the continuation condition.
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
38
rights reserved.
Nested Loops
Problem: Write a program that uses nested for
loops to print a multiplication table.
MultiplicationTable
Run
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
39
rights reserved.
Run
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
40
rights reserved.
Problem:
Finding the Greatest Common Divisor
Problem: Write a program that prompts the user to enter two positive
integers and finds their greatest common divisor.
Solution: Suppose you enter two integers 4 and 2, their greatest
common divisor is 2. Suppose you enter two integers 16 and 24, their
greatest common divisor is 8. So, how do you find the greatest
common divisor? Let the two input integers be n1 and n2. You know
number 1 is a common divisor, but it may not be the greatest commons
divisor. So you can check whether k (for k = 2, 3, 4, and so on) is a
common divisor for n1 and n2, until k is greater than n1 or n2.
GreatestCommonDivisor
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
41
rights reserved.
Run
FutureTuition
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
42
rights reserved.
Run
FutureTuition
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
43
rights reserved.
Run
y
1
-1
1
-1
can be approximated as 4 *
numberOfHits / 1000000.
MonteCarloSimulation
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
44
rights reserved.
Run
TestBreak.java
TestBreak
Run
TestContinue.java
TestContinue
Run
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
45
rights reserved.
break
public class TestBreak {
public static void main(String[] args) {
int sum = 0;
int number = 0;
while (number < 20) {
number++;
sum += number;
if (sum >= 100)
break;
}
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
46
rights reserved.
continue
public class TestContinue {
public static void main(String[] args) {
int sum = 0;
int number = 0;
while (number < 20) {
number++;
if (number == 10 || number == 11)
continue;
sum += number;
}
System.out.println("The sum is " + sum);
}
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
47
rights reserved.
GuessNumberUsingBreak
Run
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
48
rights reserved.
PrimeNumber
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
49
rights reserved.
Run
SentinelValueUsingConfirmationDialog
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
50
rights reserved.
Run
Companion
Website
Liang, Introduction to Java Programming, Ninth Edition, (c) 2013 Pearson Education, Inc. All
51
rights reserved.