0% found this document useful (0 votes)
2 views64 pages

Java Loops

This document discusses loops in Java programming, focusing on while loops, do-while loops, and for loops. It covers their syntax, use cases, and provides examples of how to implement them, including handling sentinel values and minimizing numerical errors. The lecture aims to equip students with the skills to write and control loops effectively in their programming tasks.

Uploaded by

polinas412
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
2 views64 pages

Java Loops

This document discusses loops in Java programming, focusing on while loops, do-while loops, and for loops. It covers their syntax, use cases, and provides examples of how to implement them, including handling sentinel values and minimizing numerical errors. The lecture aims to equip students with the skills to write and control loops effectively in their programming tasks.

Uploaded by

polinas412
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

Loops

Lecture 7-8

[Link]. Adem Karahoca

COMP109 COMPUTER 9.11.2022


1

PROGRAMMING(JAVA)
Motivations

Suppose that you need to print a string (e.g., "Welcome to


Java!") a hundred times. It would be tedious to have to

9.11.2022
write the following statement a hundred times:

COMP109 COMPUTER PROGRAMMING(JAVA)


[Link]("Welcome to Java!");

So, how do you solve this problem?

2
Opening Problem

Problem: [Link]("Welcome to Java!");


[Link]("Welcome to Java!");

9.11.2022
[Link]("Welcome to Java!");
[Link]("Welcome to Java!");

COMP109 COMPUTER PROGRAMMING(JAVA)


[Link]("Welcome to Java!");
[Link]("Welcome to Java!");
100
times



[Link]("Welcome to Java!");
[Link]("Welcome to Java!"); 3
[Link]("Welcome to Java!");
Introducing while Loops
int count = 0;
while (count < 100) {

9.11.2022
[Link]("Welcome to Java");

COMP109 COMPUTER PROGRAMMING(JAVA)


count++;
}

4
Objectives
1. To write programs for executing statements repeatedly using a while loop (§5.2).
2. To follow the loop design strategy to develop loops (§§5.2.1–5.2.3).
3. To control a loop with a sentinel value (§5.2.4).

9.11.2022
4. To obtain large input from a file using input redirection rather than typing from the
keyboard (§5.2.5).

PROGRAMMING(JAVA)
COMP109 COMPUTER
5. To write loops using do-while statements (§5.3).
6. To write loops using for statements (§5.4).
7. To discover the similarities and differences of three types of loop statements
(§5.5).
8. To write nested loops (§5.6).
9. To learn the techniques for minimizing numerical errors (§5.7).
10. To learn loops from a variety of examples (GCD, FutureTuition, Dec2Hex) (§5.8).
11. To implement program control with break and continue (§5.9).
5
12. To write a program that displays prime numbers (§5.11).
while Loop Flow Chart
int count = 0;
while (loop-continuation-condition) {
while (count < 100) {
// loop-body;
[Link]("Welcome to Java!");
Statement(s);

9.11.2022
count++;
} }

COMP109 COMPUTER PROGRAMMING(JAVA)


6
Trace while Loop
Initialize count
int count = 0;
while (count < 2) {

9.11.2022
[Link]("Welcome to Java!");
count++;

COMP109 COMPUTER PROGRAMMING(JAVA)


}

7
Trace while Loop, cont.
(count < 2) is true
int count = 0;
while (count < 2) {

9.11.2022
[Link]("Welcome to Java!");
count++;

COMP109 COMPUTER PROGRAMMING(JAVA)


}

8
Trace while Loop, cont.
Print Welcome to Java
int count = 0;
while (count < 2) {

9.11.2022
[Link]("Welcome to Java!");
count++;

COMP109 COMPUTER PROGRAMMING(JAVA)


}

9
Trace while Loop, cont.
Increase count by 1
int count = 0; count is 1 now

while (count < 2) {

9.11.2022
[Link]("Welcome to Java!");
count++;

COMP109 COMPUTER PROGRAMMING(JAVA)


}

10
Trace while Loop, cont.
(count < 2) is still true since count
int count = 0; is 1

while (count < 2) {

9.11.2022
[Link]("Welcome to Java!");
count++;

COMP109 COMPUTER PROGRAMMING(JAVA)


}

11
Trace while Loop, cont.
Print Welcome to Java
int count = 0;
while (count < 2) {

9.11.2022
[Link]("Welcome to Java!");
count++;

COMP109 COMPUTER PROGRAMMING(JAVA)


}

12
Trace while Loop, cont.
Increase count by 1
int count = 0; count is 2 now

while (count < 2) {

9.11.2022
[Link]("Welcome to Java!");
count++;

COMP109 COMPUTER PROGRAMMING(JAVA)


}

13
Trace while Loop, cont.
(count < 2) is false since count is 2
int count = 0; now

while (count < 2) {

9.11.2022
[Link]("Welcome to Java!");
count++;

COMP109 COMPUTER PROGRAMMING(JAVA)


}

14
Trace while Loop
The loop exits. Execute the next
int count = 0; statement after the loop.

while (count < 2) {

9.11.2022
[Link]("Welcome to Java!");
count++;

COMP109 COMPUTER PROGRAMMING(JAVA)


}

15
Problem: Repeat Addition Until Correct

Recall that Listing 3.1 [Link] gives a program that prompts the
user to enter an answer for a question on addition of two single digits. Using
a loop, you can now rewrite the program to let the user enter a new answer

9.11.2022
until it is correct.

COMP109 COMPUTER PROGRAMMING(JAVA)


IMPORTANT NOTE: If you cannot run the buttons, see
[Link]
16
RepeatAdditionQuiz Run
Repeat Addition Until Correct

COMP109 COMPUTER PROGRAMMING(JAVA) 9.11.2022


17
Problem: Guessing Numbers
Write a program that randomly generates an integer between 0 and 100,
inclusive. The program prompts the user to enter a number continuously
until the number matches the randomly generated number. For each user
input, the program tells the user whether the input is too low or too high,

9.11.2022
so the user can choose the next input intelligently. Here is a sample run:

COMP109 COMPUTER PROGRAMMING(JAVA)


GuessNumberOneTime Run
18
GuessNumber Run
Guessing Numbers

COMP109 COMPUTER PROGRAMMING(JAVA) 9.11.2022


19
Problem: An Advanced Math Learning Tool

The Math subtraction learning tool program generates just one


question for each run. You can use a loop to generate questions
repeatedly. This example gives a program that generates five

9.11.2022
questions and reports the number of the correct answers after a

COMP109 COMPUTER PROGRAMMING(JAVA)


student answers all five questions.

SubtractionQuizLoop Run 20
An Advanced Math Learning Tool

COMP109 COMPUTER PROGRAMMING(JAVA) 9.11.2022


21
Ending a Loop with a Sentinel Value
Often the number of times a loop is executed is not
predetermined. You may use an input value to signify the end of
the loop. Such a value is known as a sentinel value.

9.11.2022
Write a program that reads and calculates the sum of an

COMP109 COMPUTER PROGRAMMING(JAVA)


unspecified number of integers. The input 0 signifies the end of
the input.

SentinelValue Run 22
Ending a Loop with a Sentinel Value

COMP109 COMPUTER PROGRAMMING(JAVA) 9.11.2022


23
Caution
Don’t 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

9.11.2022
computing 1 + 0.9 + 0.8 + ... + 0.1:

COMP109 COMPUTER PROGRAMMING(JAVA)


double item = 1; double sum = 0;
while (item != 0) { // No guarantee item will be 0
sum += item;
item -= 0.1;
} 24
[Link](sum);
do-while Loop

9.11.2022
COMP109 COMPUTER PROGRAMMING(JAVA)
do {
// Loop body;
Statement(s);
} while (loop-continuation-condition); 25
for Loops
for (initial-action; loop- int i;
continuation-condition; action- for (i = 0; i < 100; i++) {
after-each-iteration) {
[Link](
// loop body;
Statement(s); "Welcome to Java!");

9.11.2022
} }

COMP109 COMPUTER PROGRAMMING(JAVA)


26
Trace for Loop
Declare i
int i;
for (i = 0; i < 2; i++) {
[Link](
"Welcome to Java!");

9.11.2022
}

COMP109 COMPUTER PROGRAMMING(JAVA)


27
Trace for Loop, cont.
Execute initializer
int i; i is now 0
for (i = 0; i < 2; i++) {
[Link](
"Welcome to Java!");

9.11.2022
}

COMP109 COMPUTER PROGRAMMING(JAVA)


28
Trace for Loop, cont.
(i < 2) is true
int i; since i is 0
for (i = 0; i < 2; i++) {
[Link]( "Welcome to Java!");
}

9.11.2022
COMP109 COMPUTER PROGRAMMING(JAVA)
29
Trace for Loop, cont.
Print Welcome to Java
int i;
for (i = 0; i < 2; i++) {
[Link]("Welcome to Java!");

9.11.2022
}

COMP109 COMPUTER PROGRAMMING(JAVA)


30
animation

Trace for Loop, cont.


Execute adjustment statement
int i; i now is 1
for (i = 0; i < 2; i++) {
[Link]("Welcome to Java!");
}

9.11.2022
COMP109 COMPUTER PROGRAMMING(JAVA)
31
Trace for Loop, cont.
(i < 2) is still true
int i; since i is 1
for (i = 0; i < 2; i++) {
[Link]("Welcome to Java!");
}

9.11.2022
COMP109 COMPUTER PROGRAMMING(JAVA)
32
Trace for Loop, cont.
Print Welcome to Java
int i;
for (i = 0; i < 2; i++) {
[Link]("Welcome to Java!");
}

9.11.2022
COMP109 COMPUTER PROGRAMMING(JAVA)
33
Trace for Loop, cont.
Execute adjustment statement
int i; i now is 2
for (i = 0; i < 2; i++) {
[Link]("Welcome to Java!");
}

9.11.2022
COMP109 COMPUTER PROGRAMMING(JAVA)
34
Trace for Loop, cont.
(i < 2) is false
int i; since i is 2
for (i = 0; i < 2; i++) {
[Link]("Welcome to Java!");
}

9.11.2022
COMP109 COMPUTER PROGRAMMING(JAVA)
35
Trace for Loop, cont.
Exit the loop. Execute the next
int i; statement after the loop
for (i = 0; i < 2; i++) {
[Link]("Welcome to Java!");

9.11.2022
}

COMP109 COMPUTER PROGRAMMING(JAVA)


36
Note
The initial-action in a for loop can be a list of zero or more
comma-separated expressions. The action-after-each-iteration in
a for loop can be a list of zero or more comma-separated
statements. Therefore, the following two for loops are correct.

9.11.2022
They are rarely used in practice, however.

COMP109 COMPUTER PROGRAMMING(JAVA)


for (int i = 1; i < 100; [Link](i++));

for (int i = 0, j = 0; (i + j < 10); i++, j++) {


// Do something
} 37
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:

9.11.2022
COMP109 COMPUTER PROGRAMMING(JAVA)
for ( ; ; ) { Equivalent while (true) {
// Do something // Do something
} }
(a) (b)

38
Caution
Adding a semicolon at the end of the for clause before the
loop body is a common mistake, as shown below:

9.11.2022
Logic
Error

COMP109 COMPUTER PROGRAMMING(JAVA)


for (int i=0; i<10; i++);
{
[Link]("i is " + i);
}
39
Caution, cont.
Similarly, the following loop is also wrong:
int i=0;
while (i < 10); Logic Error
{

9.11.2022
[Link]("i is " + i);
i++;

COMP109 COMPUTER PROGRAMMING(JAVA)


}
In the case of the do loop, the following semicolon is
needed to end the loop.
int i=0;
do {
[Link]("i is " + i);
i++; Correct 40

} while (i<10);
Which Loop to Use?
The three forms of loop statements, while, do-while, and for, are
expressively equivalent; that is, you can write a loop in any of these three
forms. For example, a while loop in (a) in the following figure can always
be converted into the following for loop in (b):

9.11.2022
while (loop-continuation-condition) { Equivalent for ( ; loop-continuation-condition; ) {
// Loop body // Loop body

COMP109 COMPUTER PROGRAMMING(JAVA)


} }
(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; initial-action;
loop-continuation-condition; Equivalent while (loop-continuation-condition) {
action-after-each-iteration) { // Loop body;
// Loop body; 41
action-after-each-iteration;
} }
(a) (b)
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

9.11.2022
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

COMP109 COMPUTER PROGRAMMING(JAVA)


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.

42
Nested Loops

Problem: Write a program that uses nested for loops


to print a multiplication table.

9.11.2022
COMP109 COMPUTER PROGRAMMING(JAVA)
MultiplicationTable Run

43
A multiplication table

COMP109 COMPUTER PROGRAMMING(JAVA) 9.11.2022


44
Minimizing Numerical Errors
Numeric errors involving floating-point numbers
are inevitable. This section discusses how to
minimize such errors through an example.

9.11.2022
Here is an example that sums a series that starts

COMP109 COMPUTER PROGRAMMING(JAVA)


with 0.01 and ends with 1.0. The numbers in the
series will increment by 0.01, as follows: 0.01 +
0.02 + 0.03 and so on.

TestSum Run 45
Minimizing Numerical Errors

COMP109 COMPUTER PROGRAMMING(JAVA) 9.11.2022


46
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.

9.11.2022
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

COMP109 COMPUTER PROGRAMMING(JAVA)


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.

47
GreatestCommonDivisor Run
Finding the Greatest Common Divisor

COMP109 COMPUTER PROGRAMMING(JAVA) 9.11.2022


48
Problem: Predicting the Future Tuition
Problem: Suppose that the tuition for a university is $10,000 this year and
tuition increases 7% every year. In how many years will the tuition be
doubled?

9.11.2022
COMP109 COMPUTER PROGRAMMING(JAVA)
FutureTuition Run

49
Predicting the Future Tuition

COMP109 COMPUTER PROGRAMMING(JAVA) 9.11.2022


50
Problem: Predicating the Future Tuition
double tuition = 10000; int year = 0 // Year 0
tuition = tuition * 1.07; year++; // Year 1
tuition = tuition * 1.07; year++; // Year 2

9.11.2022
tuition = tuition * 1.07; year++; // Year 3

COMP109 COMPUTER PROGRAMMING(JAVA)


...

51
Case Study: Converting Decimals to
Hexadecimals
Hexadecimals are often used in computer systems programming (see
Appendix F for an introduction to number systems). How do you convert a
decimal number to a hexadecimal number? To convert a decimal number d

9.11.2022
to a hexadecimal number is to find the hexadecimal digits hn, hn-1, hn-2, ... ,
h2, h1, and h0 such that

COMP109 COMPUTER PROGRAMMING(JAVA)


d = hn  16 n + hn − 1  16 n −1 + hn − 2  16 n − 2 + ... + h 2  16 2 + h1  161 + h 0  160

These hexadecimal digits can be found by successively dividing d by 16 until


the quotient is 0. The remainders are h0, h1, h2, ... , hn-2, hn-1, and hn.

Dec2Hex Run
52
Converting Decimals to Hexadecimals

COMP109 COMPUTER PROGRAMMING(JAVA) 9.11.2022


53
Problem: Monte Carlo Simulation
The Monte Carlo simulation refers to a technique that uses random numbers
and probability to solve problems. This method has a wide range of
applications in computational mathematics, physics, chemistry, and finance.

9.11.2022
This section gives an example of using the Monto Carlo simulation for
estimating .

COMP109 COMPUTER PROGRAMMING(JAVA)


y circleArea / squareArea =  / 4.
1

 can be approximated as 4 *
-1 1
x numberOfHits / numberOfTrials

MonteCarloSimulation Run 54
-1
Monte Carlo Simulation

COMP109 COMPUTER PROGRAMMING(JAVA) 9.11.2022


55
Using break and continue
Examples for using the break and continue
keywords:

9.11.2022
[Link]

COMP109 COMPUTER PROGRAMMING(JAVA)


TestBreak Run

[Link]
TestContinue Run
56
break
public class TestBreak {
public static void main(String[] args) {
int sum = 0;
int number = 0;

9.11.2022
while (number < 20) {
number++;

COMP109 COMPUTER PROGRAMMING(JAVA)


sum += number;
if (sum >= 100)
break;
}

[Link]("The number is " + number);


[Link]("The sum is " + sum);
} 57
}
continue
public class TestContinue {
public static void main(String[] args) {
int sum = 0;
int number = 0;

9.11.2022
while (number < 20) {

COMP109 COMPUTER PROGRAMMING(JAVA)


number++;
if (number == 10 || number == 11)
continue;
sum += number;
}

[Link]("The sum is " + sum);


} 58

}
Guessing Number Problem Revisited

Here is a program for guessing a number. You can


rewrite it using a break statement.

9.11.2022
COMP109 COMPUTER PROGRAMMING(JAVA)
GuessNumberUsingBreak Run

59
Guessing Number Problem Revisited

COMP109 COMPUTER PROGRAMMING(JAVA) 9.11.2022


60
Problem: Checking Palindrome
A string is a palindrome if it reads the same forward and
backward. The words “mom,” “dad,” and “noon,” for instance,
are all palindromes.
The problem is to write a program that prompts the user to enter a

9.11.2022
string and reports whether the string is a palindrome. One

COMP109 COMPUTER PROGRAMMING(JAVA)


solution is to check whether the first character in the string is the
same as the last character. If so, check whether the second
character is the same as the second-to-last character. This process
continues until a mismatch is found or all the characters in the
string are checked, except for the middle character if the string
has an odd number of characters.
low high 61
Palindrome Run
String s a b c d e f g n h g f e d c b a
Checking Palindrome

COMP109 COMPUTER PROGRAMMING(JAVA) 9.11.2022


62
Problem: Displaying Prime Numbers

Problem: Write a program that displays the first 50 prime numbers in


five lines, each of which contains 10 numbers. An integer greater than
1 is prime if its only positive divisor is 1 or itself. For example, 2, 3,

9.11.2022
5, and 7 are prime numbers, but 4, 6, 8, and 9 are not.

COMP109 COMPUTER PROGRAMMING(JAVA)


Solution: The problem can be broken into the following tasks:
•For number = 2, 3, 4, 5, 6, ..., test whether the number is prime.
•Determine whether a given number is prime.
•Count the prime numbers.
•Print each prime number, and print 10 numbers per line.

PrimeNumber Run 63
Displaying Prime Numbers

COMP109 COMPUTER PROGRAMMING(JAVA) 9.11.2022


64

You might also like