Вы находитесь на странице: 1из 32

Loops

Java looping
Options
while
do-while
for
Allow programs to control how many times a statement list is
executed

Java looping
Two types of loops
Count-controlled loops
Event-controlled loops
for loop is best for count-controlled loops
while and do-while loops are for both, mainly eventcontrolled loops.

Averaging
Problem
Extract a list of positive numbers from standard input and
produce their average
Numbers are one per line
A negative number acts as a sentinel to indicate that
there are no more numbers to process
Observations
Cannot supply sufficient code using just assignments and
conditional constructs to solve the problem
Dont how big of a list to process
Need ability to repeat code as needed

Averaging
Algorithm
Prepare for processing
Get first input
While there is an input to process do {
Process current input
Get the next input
}
Perform final processing

Averaging
Problem
Extract a list of positive numbers from standard input and
produce their average
Numbers are one per line
A negative number acts as a sentinel to indicate that
there are no more numbers to process
Sample run
Enter positive numbers one per line.
Indicate end of list with a negative number.
4.5
0.5
1.3
-1
6
Average 2.1

public class NumberAverage {


// main(): application entry point
public static void main(String[] args) {
// set up the input
// prompt user for values
// get first value
// process values one-by-one
while (value >= 0) {
// add value to running total
// processed another value
// prepare next iteration - get next value
}

// display result
if (valuesProcessed > 0)
// compute and display average
else
// indicate no average to display

int valuesProcessed = 0;
double valueSum = 0;
// set up the input

Scanner stdin = new Scanner (System.in);


// prompt user for values

System.out.println("Enter positive numbers 1 per line.\n"


+ "Indicate end of the list with a negative number.");
// get first value

double value = stdin.nextDouble();


// process values one-by-one

while (value >= 0) {


valueSum += value;
++valuesProcessed;
value = stdin.nextDouble();
}
// display result

if (valuesProcessed > 0) {
double average = valueSum / valuesProcessed;
System.out.println("Average: " + average);
} else {
System.out.println("No list to average");
}

While syntax and semantics

w h ile ( Expression

) Action

Logical expression that


determines whether Action
is to be executed

Action is either a single


statement or a statement
list within braces

While semantics for averaging


problem
Test expression is evaluated at the
start of each iteration of the loop.
// process values one-by-one
while ( value >= 0 ) {
// add value to running total
valueSum += value;
// we processed another value
++valueProcessed;
// prepare to iterate get the next input
value = stdin.nextDouble();
}

If test expression is true, these statement


are executed. Afterward, the test express
is reevaluated and the process repeats
10

While Semantics

Expression

If Expression is
true, Action is
executed

true

Action

Expression is
evaluated at the
start of each
iteration of the
loop

false

If Expression is
false, program
execution
continues with
next statement

11

Suppose input contains: 4.5 0.5 1.3


-1

Execution Trace

valuesProcessed 3
0
1
2

int valuesProcessed = 0;
double valueSum = 0;

4.5
valueSum 6.3
0
5.0
value -1
4.5
0.5
1.3

double value = stdin.nextDouble();


while (value >= 0) {
valueSum += value;
++valuesProcessed;
value = stdin.nextDouble();
}

average 2.1

if (valuesProcessed > 0) {
double average = valueSum / valuesProcessed;
System.out.println("Average: " + average);
}
else {
System.out.println("No list to average");
12
}

Loop design
Questions to consider in loop design and analysis
What initialization is necessary for the loops test
expression?
What initialization is necessary for the loops processing?
What causes the loop to terminate?
What actions should the loop perform?
What actions are necessary to prepare for the next
iteration of the loop?
What conditions are true and what conditions are false
when the loop is terminated?
13

When the loop completes what actions are need to

The For Statement


The body of the loop iterates
while the test expression is
true

Initialization step
is performed only
After each iteration of the
once -- just prior intcurrentTerm = 1;
body of the loop, the update
to the first
evaluation of the
for ( int i= 0; i< 5; + + i) { expression is reevaluated
test expression System .out.println(currentTerm );
currentTerm *= 2;
The body of the loop displays the
}
current term in the number series.
It then determines what is to be the
new current number in the series

14

Evaluated once
at the beginning
of the for
statements's
execution

If ForExpr is true,
Action is
executed
After the Action
has completed,
the
PostExpression
is evaluated

ForInit

ForExpr
true

Action

ForU pdate

After evaluating the


PostExpression, the next
iteration of the loop starts

The ForExpr is
evaluated at the
start of each
iteration of the
loop

false

If ForExpr is
false, program
execution
continues with
next statement

for statement syntax

Logical test expression that determines whether the action and update step are
executed
Initialization step prepares for the
first evaluation of the test
expression

for ( ForInit

; ForExpression

Update step is performed after


the execution of the loop body

; ForU pdate

) Action

The body of the loop iterates whenever


the test expression evaluates to true

16

for vs. while


A for statement is almost like a while statement
for ( ForInit; ForExpression; ForUpdate ) Action
is ALMOST the same as:
ForInit;
while ( ForExpression ) {
Action;
ForUpdate;
}
This is not an absolute equivalence!
Well see when they are different in a bit

17

Variable declaration
You can declare a variable in any block:
Variable n gets created
(and initialized) each time

while ( true ) {
int n = 0;
n++;
System.out.println (n);
}
System.out.println (n);

Thus, println() always


prints out 1
Variable n is not
defined once while
loop ends

As n is not defined
here, this causes
an error
18

Variable declaration
You can declare a variable in any block:
if ( true ) {
int n = 0;
n++;
System.out.println (n);
}
System.out.println (n);

Only difference
from last slide
19

Execution Trace
i 1
0
3
2

for ( int i = 0; i < 3; ++i ) {

System.out.println("i is " + i);


}
System.out.println("all done");

i is 0
i is 1
i is 2
all done

Variable i has gone


out of scope it
is local to the loop

20

for vs. while

An example when a for loop can be directly translated into a while


loop:
int count;
for ( count = 0; count < 10; count++ ) {
System.out.println (count);
}

Translates to:
int count;
count = 0;
while (count < 10) {
System.out.println (count);
count++;
}

21

for vs. while


An example when a for loop CANNOT be directly translated
into a while loop:
only difference
for ( int count = 0; count < 10; count++ ) {
System.out.println (count);
}
. Would (mostly) translate as:

count is NOT defined here

int count = 0;
while (count < 10) {
System.out.println (count);
count++;
}
count IS defined here 22

for loop indexing


Java (and C and C++) indexes everything from zero
Thus, a for loop like this:
for ( int i = 0; i < 10; i++ ) { ... }
Will perform the action with i being value 0 through 9, but
not 10
To do a for loop from 1 to 10, it would look like this:
for ( int i = 1; i <= 10; i++ ) { ... }
23

Nested loops
int m = 2;
int n = 3;
for (int i = 0; i < n; ++i) {
System.out.println("i is " + i);
for (int j = 0; j < m; ++j) {
System.out.println("
j is "
}
i is 0
}
j is
j is
i is 1
j is
j is
i is 2
j is
j is

+ j);
0
1
0
1
0
1

24

Nested loops
int m = 2;
int n = 4;
for (int i = 0; i < n; ++i) {
System.out.println("i is " + i);
for (int j = 0; j < i; ++j) {
System.out.println("
j is " + j);
}
}

i is 0
i is 1
j is
i is 2
j is
j is
i is 3
j is
j is
j is

25

0
0
1
0
1
2

How well do you understand


for loops?
1.
2.

3.

4.
5.

Very well! This


stuff is easy!
Fairly well with
a little review,
Ill be good
Okay. Its not
great, but its
not horrible,
either
Not well. Im
kinda confused
Not at all. Im
soooooo lost
26

The do-while statement


Syntax
do Action
while(Expression)
Semantics
Execute Action
If Expression is true then
execute Action again
Repeat this process until
Expression evaluates to
false
Action is either a single
statement or a group of
statements within braces

Action

true
Expression
false
27

Picking off digits


Consider
System.out.print("Enter a positive number: ");
int number = stdin.nextInt();
do {
int digit = number % 10;
System.out.println(digit);
number = number / 10;
} while (number != 0);
Sample behavior
Enter a positive number: 1129
9
2
1
1

28

Guessing a number
This program will allow the user to guess the number the
computer has thought of
Main code block:
do {
System.out.print ("Enter your guess: ");
guessedNumber = stdin.nextInt();
count++;
} while ( guessedNumber != theNumber );

29

while vs. do-while


If the condition is false:
while will not execute the action
do-while will execute it once
while ( false ) {
System.out.println (foo);
}
do {
System.out.println (foo);
} while ( false );

never executed

executed once

30

The continue keyword

The continue keyword will immediately start the next iteration of the
loop
The rest of the current loop is not executed
But the ForUpdate part is, if continue is in a for loop
for ( int a = 0; a <= 10; a++ ) {
if ( a % 2 == 0 ) {
continue;
}
System.out.println (a + " is odd");
}

Output:1
3
5
7
9

is
is
is
is
is

odd
odd
odd
odd
odd

31

The break keyword

The break keyword will immediately stop the execution of the loop
Execution resumes after the end of the loop
for ( int a = 0; a <= 10; a++ ) {
if ( a == 5 ) {
break;
}
System.out.println (a + " is less than five");
}

Output:0
1
2
3
4

is
is
is
is
is

less
less
less
less
less

than
than
than
than
than

five
five
five
five
five

32

Вам также может понравиться