Download Chapter 5 Part 3 of 3

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Chapter 5 – Part 3
Conditionals and
Loops
Outline
The if Statement and Conditions
Other Conditional Statements
Comparing Data
The while Statement
Other Repetition Statements
Iterators
© 2004 Pearson Addison-Wesley. All rights reserved
2/19
The do Statement
• A do statement has the following syntax:
do
{
statement;
}
while ( condition )
• The statement is executed once initially, and then
the condition is evaluated
• The statement is executed repeatedly until the
condition becomes false
© 2004 Pearson Addison-Wesley. All rights reserved
3/19
Logic of a do Loop
statement
true
condition
evaluated
false
Note: no ‘pretest.’ Statement will at least be executed on time!
© 2004 Pearson Addison-Wesley. All rights reserved
4/19
The do Statement
• An example of a do loop:
int count = 0;
do
{
count++;
System.out.println (count);
} while (count < 5);
• The body of a do loop executes at least once
• See ReverseNumber.java
© 2004 Pearson Addison-Wesley. All rights reserved
5/19
Comparing while and do
The while Loop
The do Loop
statement
condition
evaluated
true
true
false
condition
evaluated
statement
false
© 2004 Pearson Addison-Wesley. All rights reserved
6/19
The for Statement – VIP!
• A for statement has the following syntax:
• Remember: every loop has some kind of initialization,
test to continue/end the loop, and a body of the loop.
The initialization
is executed once
before the loop begins
The statement is
executed until the
condition becomes false
for ( initialization ; condition ; increment )
statement;
The increment portion is executed at
the end of each iteration
© 2004 Pearson Addison-Wesley. All rights reserved
7/19
Logic of a for loop
initialization
condition
evaluated
true
false
statement
increment
Does initializing, pretest, increment and posttest …..
© 2004 Pearson Addison-Wesley. All rights reserved
8/19
The for Statement
• A for loop is functionally equivalent to the
following while loop structure:
initialization;
while ( condition )
{
statement;
increment;
}
Know how to write the same functionality in ALL loops.
For example, I will give you an exercise and require you to
write the solution using a do…while, while loop, and a for loop.
© 2004 Pearson Addison-Wesley. All rights reserved
9/19
The for Statement
• An example of a for loop:
for (int count=1; count <= 5; count++)
System.out.println (count);
• The initialization section can be used to declare a
variable
• Like a while loop, the condition of a for loop is
tested prior to executing the loop body
• Therefore, the body of a for loop will execute zero
or more times
© 2004 Pearson Addison-Wesley. All rights reserved
10/19
The for Statement
• The increment section can perform any calculation
for (int num=100; num > 0; num -= 5)
System.out.println (num);
• A for loop is well suited for executing statements
a specific number of times that can be calculated
or determined in advance
• Used a lot where ‘counting’ is needed
• See Multiples.java
• See Stars.java next slide.
© 2004 Pearson Addison-Wesley. All rights reserved
11/19
Here we have an example of nested-for loops.
public class Stars
{
public static void main (String[] args)
{
final int MAX_ROWS = 10;
for (int row = 1; row <= MAX_ROWS; row++)
{
for (int star = 1; star <= row; star++)
System.out.print (“*”);
System.out.println();
} // end for
} // end main()
} // end class
© 2004 Pearson Addison-Wesley. All rights reserved
12/19
The for Statement
•  Each expression in the header of a for loop is optional
• If the initialization is left out, no initialization is performed
 (This had better be performed outside / prior to the loop)
• If the condition is left out, it is always considered to be true,
and therefore creates an infinite loop
 But the loop must terminate. So some specific code within the
loop had better constitute a test so that the loop may terminate.
• If the increment is left out, no increment operation is
performed
 Again, if left out, something within the body of the loop had
better increment or adjust the increment/decrement counter.
•  You may omit these at your own peril. It is actually okay,
but you’d better be VERY careful!!!!!
© 2004 Pearson Addison-Wesley. All rights reserved
13/19
Iterators
• An iterator is an object that allows you to process
a collection of items one at a time
• It lets you step through each item in turn and
process it as needed
• An iterator object has a hasNext method that
returns true if there is at least one more item to
process
• The next method returns the next item
• Iterator objects are defined using the Iterator
interface, which is discussed further in Chapter 6
© 2004 Pearson Addison-Wesley. All rights reserved
14/19
Iterators
•
Several classes in the Java standard class library are iterators
•
The Scanner class is an iterator

the hasNext method returns true if there is more data to be scanned

the next method returns the next scanned token as a string
•
The Scanner class also has variations on the hasNext method for specific
data types (such as hasNextInt)
•
Essentially, an iterator is an object that points to a collection of
objects. Within the iterator are methods that the service provider
provides, such as hasNext(), next() and others as appropriate.
•
The iterator object’s methods allow a client to process a collection
of objects without getting into the collection methods themselves…
That is, the iterator’s methods are data independent.
•
Will explain more later. Very useful for processing arrays, linked
lists, and more.
© 2004 Pearson Addison-Wesley. All rights reserved
15/19
Iterators – I couldn’t resist… 
• Example: I have stored a collection of numbers in an ‘array.’
I want to add all of them up or develop the ‘average.’ So, I
must first see if there is another number, then fetch it, then
add it, and repeat until there are no more numbers.
• To do this, I must initialize a variable to accumulate the sum
and then do all above.
• If an iterator is defined on this collection of numbers, I don’t
have to worry about if there are more, indexing to point to
the next one, fetch it, add it and continue.
• I only need to determine if there are more (hasNext()) and
issue a next() and add. I don’t have to worry about what the
data looks like (integers, floats, objects, etc.). The iterator,
properly designed, will accommodate all this for me.
• Sample:
• int [ ] myGrades = {92, 85, 72, 98, 80};
• Interpret as: myGrades [0] = 92; myGrades [1] = 85, etc…..
© 2004 Pearson Addison-Wesley. All rights reserved
16/19
Iterators
• The fact that a Scanner is an iterator is
particularly helpful when reading input from a file
• Suppose we wanted to read and process a list of
URLs stored in a file
• One scanner can be set up to read each line of the
input until the end of the file is encountered
• Another scanner can be set up for each URL to
process each part of the path
• See URLDissector.java on the next slide.
© 2004 Pearson Addison-Wesley. All rights reserved
17/19
// URLDissector.java
Author: Lewis/Loftus
import java.util.Scanner;
import java.io.*;
public class URLDissector
{
// Reads urls from a file and prints their path components.
public static void main (String[] args) throws IOException
{
String url;
Scanner fileScan, urlScan; // Here we have two Scanner references to objects to be created.
// so far, we’ve only read from the keyboard; here, we read from a file
fileScan = new Scanner (new File ("urls.input"));
// creates Scnner object which points to file named urls.input…
// Read and process each line of the file
while (fileScan.hasNext()) // as long as there is one more ‘record’, we will continue…
// hasNext() is an inherited method that all Scanner objects have. This is how the Scanner
//class is defined – it already contains these methods…
{
url = fileScan.nextLine();
// retrieves next string from urls.inp file.
System.out.println ("URL: " + url); // prints it.
urlScan = new Scanner (url); // Here we create new Scanner object; feed it String retrieved
// from the most recent fileScan (three lines above)
urlScan.useDelimiter("/");
// Print each part of the url
while (urlScan.hasNext())
System.out.println (" " + urlScan.next());
System.out.println();
}//Pearson
end outer
while
© 2004
Addison-Wesley.
All rights reserved
} // end main()
18/19
Iterators and for Loops
• Recall that an iterator is an object that allows you
to process each item in a collection
• A variant of the for loop simplifies the repetitive
processing the items
• For example, if BookList is an iterator that
manages Book objects, the following loop will print
each book:
array of Books
for (Book myBook : BookList)
System.out.println (myBook);
Very important concept. Will hit this harder later.
But learn the basics here.
© 2004 Pearson Addison-Wesley. All rights reserved
19/19
Iterators and for Loops
• This style of for loop can be read "for each Book
in BookList, …"
• Therefore the iterator version of the for loop is
sometimes referred to as the foreach loop
• It eliminates the need to call the hasNext and
next methods explicitly
• It also will be helpful when processing arrays,
which are discussed in Chapter 7
© 2004 Pearson Addison-Wesley. All rights reserved
20/19
Questions I like to ask… 
• Write a loop to add the first 100 positive integers
(1-100) using
 A while loop
 A for loop
 A do…while loop
• Do all loops test first? If so, agree; if not, who??
• Which loop is best for testing some general
boolean condition?
• Which loop is best for counting?
• Which loop will always execute first before
testing?
© 2004 Pearson Addison-Wesley. All rights reserved
21/19