Chapter 5 Part 3 Conditionals and Loops Outline





















- Slides: 21
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 Reverse. Number. java © 2004 Pearson Addison-Wesley. All rights reserved 5/19
Comparing while and do The while Loop The do Loop statement condition evaluated 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 has. Next 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 has. Next 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 has. Next method for specific data types (such as has. Next. Int) • 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 has. Next(), 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 (has. Next()) 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 [ ] my. Grades = {92, 85, 72, 98, 80}; • Interpret as: my. Grades [0] = 92; my. Grades [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 file. Scan, url. Scan; // 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. Scan = 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 (file. Scan. has. Next()) // as long as there is one more ‘record’, we will continue… // has. Next() is an inherited method that all Scanner objects have. This is how the Scanner //class is defined – it already contains these methods… { url = file. Scan. next. Line(); // retrieves next string from urls. inp file. System. out. println ("URL: " + url); // prints it. url. Scan = new Scanner (url); // Here we create new Scanner object; feed it String retrieved // from the most recent file. Scan (three lines above) url. Scan. use. Delimiter("/"); // Print each part of the url while (url. Scan. has. Next()) System. out. println (" " + url. Scan. 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 Book. List is an iterator that manages Book objects, the following loop will print each book: array of Books for (Book my. Book : Book. List) System. out. println (my. Book); 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 Book. List, …" • Therefore the iterator version of the for loop is sometimes referred to as the foreach loop • It eliminates the need to call the has. Next 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