ppt - Villanova Department of Computing Sciences

Download Report

Transcript ppt - Villanova Department of Computing Sciences

Iterators and File Input
CSC 1051 – Data Structures and Algorithms I
Dr. Mary-Angela Papalaskari
Department of Computing Sciences
Villanova University
Course website:
www.csc.villanova.edu/~map/1051/
Some slides in this presentation are adapted from the slides accompanying Java Software Solutions by Lewis & Loftus
CSC 1051 M.A. Papalaskari, Villanova University
Outline of Chapter 5
Boolean Expressions
The if Statement
Comparing Data
The while Statement
Iterators
The ArrayList Class
Determining Event Sources
Check Boxes and Radio Buttons
CSC 1051 M.A. Papalaskari, Villanova University
Iterators
• Iterating: to process a collection of
items, one at a time
• Typical iterator methods:
–hasNext() - returns true if there is at
least one more item to process
–next() returns the next item
CSC 1051 M.A. Papalaskari, Villanova University
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)
CSC 1051 M.A. Papalaskari, Villanova University
Example – What if input is not an int?
System.out.print ("Enter the quantity: ");
quantity = scan.nextInt();
CSC 1051 M.A. Papalaskari, Villanova University
Example – What if input is not an int?
System.out.print ("Enter the quantity: ");
// wrong kind of input?
quantity = scan.nextInt();
CSC 1051 M.A. Papalaskari, Villanova University
Example – What if input is not an int?
System.out.print ("Enter the quantity: ");
while (!scan.hasNextInt()) // wrong kind of input?
{
// first scan the wrong input to get rid of it
String rong = scan.next();
System.out.print(”Try again. Enter the quantity:");
}
// now we know we have an integer, so scan it
quantity = scan.nextInt();
CSC 1051 M.A. Papalaskari, Villanova University
Example – What if input is negative?
do
{
System.out.print ("Enter the quantity: ");
while (!scan.hasNextInt()) // wrong kind of input?
{
// first scan the wrong input to get rid of it
String rong = scan.next();
System.out.print(”Try again. Enter the quantity:");
}
// now we know we have an integer, so scan it
quantity = scan.nextInt();
}
while (quantity <0); // try again if quantity is negative
CSC 1051 M.A. Papalaskari, Villanova University
Using Scanner to read from a file
• Create a “file object”
File myFile = new File("sample.inp");
• Create a Scanner to read from file object
Scanner fileScan = new Scanner (myFile);
• Use next() to obtain next token
• Use nextLine() to obtain entire line of text (until \n)
• Use hasNext() to test whether you are done
CSC 1051 M.A. Papalaskari, Villanova University
File Input Example: FileInput.java
public class FileInput
{
//---------------------------------------------------------------// Reads text from a file and prints it in uppercase.
//---------------------------------------------------------------public static void main (String[] args) throws IOException
{
String line;
File myFile = new File("sample.inp");
Scanner fileScan = new Scanner (myFile));
// Read and process each line of the file
while (fileScan.hasNext())
{
line = fileScan.nextLine();
System.out.println (line.toUpperCase());
}
}
}
CSC 1051 M.A. Papalaskari, Villanova University
File Input Example
public class FileInput
{
//---------------------------------------------------------------sample.inp
// Reads text from a file and prints it in uppercase.
//---------------------------------------------------------------Computers
are useless. They can only give you answers.
public
static
void- main
Pablo Picasso (1881
1973)(String[] args) throws IOException
{
String line;
File myFile = new File("sample.inp");
Scanner fileScan = new Scanner (myFile));
// Read and process each line of the file
while (fileScan.hasNext())
{
line = fileScan.nextLine();
System.out.println (line.toUpperCase());
}
}
}
Run Output
COMPUTERS ARE USELESS. THEY CAN ONLY GIVE YOU ANSWERS.
PABLO PICASSO (1881 - 1973)
CSC 1051 M.A. Papalaskari, Villanova University
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
CSC 1051 M.A. Papalaskari, Villanova University
//********************************************************************
// URLDissector.java
Author: Lewis/Loftus
//
// Demonstrates the use of Scanner to read file input and parse it
// using alternative delimiters.
//********************************************************************
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;
fileScan = new Scanner (new File("urls.inp"));
continue
CSC 1051 M.A. Papalaskari, Villanova University
continue
// Read and process each line of the file
while (fileScan.hasNext())
{
url = fileScan.nextLine();
System.out.println ("URL: " + url);
urlScan = new Scanner (url);
urlScan.useDelimiter("/");
// Print each part of the url
while (urlScan.hasNext())
System.out.println ("
" + urlScan.next());
System.out.println();
}
}
}
CSC 1051 M.A. Papalaskari, Villanova University
Sample Run
continue
URL: www.google.com
www.google.com
// Read and process each line of the file
URL: www.linux.org/info/gnu.html
while (fileScan.hasNext())
www.linux.org
{
url = fileScan.nextLine();
info
System.out.println
gnu.html ("URL: " + url);
urlScan = new Scanner (url);
URL: thelyric.com/calendar/
urlScan.useDelimiter("/");
thelyric.com
calendar
Print
each part of the url
//
while (urlScan.hasNext())
System.out.println
("
" + urlScan.next());
URL: www.cs.vt.edu/undergraduate/about
www.cs.vt.edu
}
}
}
System.out.println();
undergraduate
about
URL: youtube.com/watch?v=EHCRimwRGLs
youtube.com
watch?v=EHCRimwRGLs
CSC 1051 M.A. Papalaskari, Villanova University
Homework
• Review Section 5.5
– Always do all self-review exercises when you review
Some slides in this presentation are adapted from the slides accompanying Java Software Solutions by Lewis & Loftus
CSC 1051 M.A. Papalaskari, Villanova University