Survey
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project
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