ise 582: web technology for industrial engineering university of southern california dje dept of...

37
ISE 582: Web Technology for Industrial Engineering University of Southern California DJE Dept of Industrial and Systems Engineering Lecture 6 JAVA Cup 5: Data Structures

Post on 19-Dec-2015

217 views

Category:

Documents


0 download

TRANSCRIPT

ISE 582: Web Technology for Industrial Engineering

University of Southern CaliforniaDJE Dept of Industrial and Systems

Engineering

Lecture 6JAVA Cup 5: Data Structures

3 October 2002 Web Technology for IE 2

Handouts

• Lecture 6 slides• READ Winston & Narasimhan :

– Chapters 27-31, 33 (pp 149-194, 201-203)

3 October 2002 Web Technology for IE 3

JAVA Cup 5

• File Access– Input file streams– Output file streams

• Arrays and Vectors– How to create and access arrays– Expandable vectors

• Characters and Strings

3 October 2002 Web Technology for IE 4

File Input Streams

• Reading files one-byte-at-a-time• Taking bigger bites• Java’s input-output package• Traditional string handling• Updating to tokens: number /

words

3 October 2002 Web Technology for IE 5

File input streams

• A stream is a sequence of values.• To read bytes from a file:

– FileInputStream stream = new FileInputStream(“input.data”)

– FileInputStream stream = new FileInputStream(“~username/public_html/ise582/input.data”);

• When you are done, it is good to:– stream.close()

• Reads ONE BYTE AT A TIME…

3 October 2002 Web Technology for IE 6

To take bigger bites than bytes

• To read characters from your file:– InputStreamReader reader = new

InputStreamReader(stream);

• To read lines from your file:– BufferedReader buffer = new BufferedReader(reader);– buffer.readLine()

stream reader buffer

3 October 2002 Web Technology for IE 7

Input-output package

• Notify JAVA that you want to work with input or output streams:– import java.io.FileInputStream– import java.io.*

• In the event of error– use try-catch statements– throw an exception, throws

IOException

3 October 2002 Web Technology for IE 8

Traditional Approach Example

import java.io.*;public class Demonstrate { public static void main(String argv[]) throws IOException { FileInputStream stream = new

FileInputStream(“input.data”); InputStreamReader reader = new

InputStreamReader(stream); BufferedReader buffer = new BufferedReader(reader); String line; while ((line=buffer.readLine())!=null && !line.equals(“”))

{ System.out.println(“Line read: “ + line); } stream.close(); return; }}

3 October 2002 Web Technology for IE 9

String Methods• line.trim()

– removes white space

• line.indexOf(“ “)– index of first occurrence, starts from 0

• line.substring(2)– returns rest of line after index 2

• line.substring(0,1)• Integer.parseInt(“4”)

– converts string to integer

3 October 2002 Web Technology for IE 10

Example Continuedline = line.trim();int nextSpace = line.indexOf(" ");int x = Integer.parseInt(line.substring(0,nextSpace));

line = line.substring(nextSpace).trim();nextSpace=line.indexOf(" ");int y = Integer.parseInt(line.substring(0,nextSpace));

line = line.substring(nextSpace).trim();int z = Integer.parseInt(line);

System.out.println("Numbers read: " + x + ", " + y + ", " + z);

3 October 2002 Web Technology for IE 11

The Token Approach

• The stream tokenizer:– StreamTokenizer tokens = new

StreamTokenizer(reader);– Do away with the BufferedReader– Divides character sequences into tokens, delimited by

white space

• Token Methods:– tokens.nextToken()– assigns value to nval, tokens.nval– always a double, if need recasting: (int) tokens.nval– end of token string indicated by TT_EOF: tokens.TT_EOF

3 October 2002 Web Technology for IE 12

Token Exampleimport java.io.*;public class Demonstrate { public static void main (String argv[]) throws IOException { FileInputStream stream = new FileInputStream("input.data"); InputStreamReader reader = new

InputStreamReader(stream); StreamTokenizer tokens = new StreamTokenizer(reader); while (tokens.nextToken()!= tokens.TT_EOF) { int x = (int) tokens.nval; tokens.nextToken(); int y = (int) tokens.nval; tokens.nextToken(); int z = (int) tokens.nval; Movie m = new Movie(x,y,z); System.out.println("Rating: " + m.rating()); } stream.close(); }}

3 October 2002 Web Technology for IE 13

Words vs. Numbers

• If the token is a number– nextToken returns a TT_NUMBER instance– the number is assigned to nval

• If the token is a word– nextToken returns a TT_WORD instance– the number is assigned to sval

3 October 2002 Web Technology for IE 14

Word / Number Exampleint next=0;while ((next=tokens.nextToken())!= tokens.TT_EOF) { switch (next) { case tokens.TT_WORD: break; case tokens.TT_NUMBER: int x = (int) tokens.nval; tokens.nextToken(); int y = (int) tokens.nval;

tokens.nextToken(); int z = (int) tokens.nval; Movie m = new Movie(x,y,z); System.out.println("Rating: " + m.rating()); break; } }

3 October 2002 Web Technology for IE 15

Arrays and Vectors

• Creating / assigning values to arrays• Passing arrays to methods• Command-line arguments• Creating vectors• Vector methods• Vectors as targets• Using vector iterators

3 October 2002 Web Technology for IE 16

Creating Arrays

• Creating an array– <elt_type> <array_name> [] = new <elt_type>

[ <size> ];– int durations [] = new int [4];

• What you can do with an array– call / assign an elt: <array_name> [<index>]– find its length: <array_name>.length

• Arrays of class instances– <Class> <array_name> [] = new <Class> [ <size> ];– Movie movies [] = new Movie [4];

3 October 2002 Web Technology for IE 17

Instance Array Elements

• Field-selection operator still works– movies[3].script = 6

• Checking to see if element is assigned– movies[2] == null

• Using instance as target for method– movies[1].rating()

3 October 2002 Web Technology for IE 18

Mixing Creation and Elt Insertion

public class Demonstrate { public static void main (String argv[]) { Movie movies[] = { new Movie(5,6,3), new Movie(8,7,7), new Movie(7,2,2), new Movie(7,5,5)}; int sum = 0; for (int counter=0; counter < movies.length; ++counter) { sum += movies[counter].rating(); } System.out.print("The average rating of the " +

movies.length); System.out.println(" movies is " + sum / movies.length);} }

3 October 2002 Web Technology for IE 19

Arrays and Memory

• Arrays are reference type variables• Integer arrays contain a length

variable and 4 bytes of memory per instance

• Class instance arrays contain a length variable and several bytes for the address of each instance

3 October 2002 Web Technology for IE 20

Higher Dimension Arrays

• You can easily define arrays of higher dimension– double 2DArray [] [] = new

double[2][100];

3 October 2002 Web Technology for IE 21

Passing an Array to a Method

• To designate that a parameter is array– public static Movie[] readData(Movie movies []) throws IOExc..– public static Movie[] readData(Movie[] movies) throws IOExc..

• E.g.: put file-reads into Auxiliary Class• Some ways to define readData:

– Create array, pass array address to method, return address– Create array, pass array address to method, return nothing– Create array variable, pass filename to method, return array

3 October 2002 Web Technology for IE 22

Command-Line Arguments

• The main methods has one parameter– an array of Strings, argv[]– argv.length is # command-line

arguments

3 October 2002 Web Technology for IE 23

Examplepublic class Command {

public static void main(String argv[]) {

Movie m = new Movie(Integer.parseInt(argv[0]), Integer.parseInt(argv[1]), Integer.parseInt(argv[2]));

System.out.println("The rating is " + m.rating());

}}

3 October 2002 Web Technology for IE 24

Vectors

• Vectors vs. Arrays– variable in length– insertions can occur at any point– elements can only be class

instances

• Provided by Java’s utility package– import java.util.*– Vector v = new Vector();

3 October 2002 Web Technology for IE 25

Vector Methods• Insertions and deletions

– v.addElement(m) … adds to back end of vector– v.insertElementAt(m,0) … adds to front of vector– v.removeElementAt(0) … removes first element– v.setElementAt(m,4) … replaces element

• Access to elements– v.firstElement()– v.lastElement()– v.elementAt(2) • Size of Vector

– v.size()

3 October 2002 Web Technology for IE 26

A Little Quiz

• Which methods do you need to represent FIFO queues?

• Which methods do you need to represent LIFO queues (stacks)?

3 October 2002 Web Technology for IE 27

Vectors as Targets

• All vector elements are instances of the Object class

• All vector methods work with instances of the Object class

• You can work with an element of the vector class by casting the element:– ( (Movie) (v.firstElement()) ).rating()

3 October 2002 Web Technology for IE 28

Exampleimport java.io.*;import java.util.*;public class Auxiliaries2 { public static Vector readData(String fileName) throws IOException { FileInputStream stream = new FileInputStream(fileName); InputStreamReader reader = new InputStreamReader(stream); StreamTokenizer tokens = new StreamTokenizer(reader); Vector v = new Vector(); while (tokens.nextToken() != tokens.TT_EOF) { int x = (int) tokens.nval; tokens.nextToken(); int y = (int) tokens.nval; tokens.nextToken(); int z = (int) tokens.nval; v.addElement(new Movie(x,y,z)); } stream.close(); return v; }}

3 October 2002 Web Technology for IE 29

Iterators

• An iterator maintains a pointer to a place on the parent vector

• To create an iterator– Iterator i = v.iterator()

• Some Iterator methods– i.next() … returns element, advances

pointer– i.hasNext()

3 October 2002 Web Technology for IE 30

Exampleimport java.io.*;import java.util.*;public class Demonstrate { public static void main(String argv[]) throws IOException { Vector mainVector = Auxiliaries2.readData("input.data"); int size = mainVector.size(); for ( Iterator i = mainVector.iterator(); i.hasNext(); ) { System.out.println(( (Movie) i.next() ).rating()); } }}

3 October 2002 Web Technology for IE 31

Working with Char & Strings

• What you can do with Strings• Specifying delimiters in File-reads

3 October 2002 Web Technology for IE 32

The String s

• s.length() … compare this to arrays• + concatenates two strings• s.charAt(0) extracts first character• s.charAt(0)==‘M’ … note single

quotes• switch(s) … use in switch statements• char c = s.charAt(0);• default character is ‘\u000’

3 October 2002 Web Technology for IE 33

Example (excerpt) while (tokens.nextToken() != tokens.TT_EOF) {

String codeString = tokens.sval; tokens.nextToken(); int x = (int) tokens.nval; tokens.nextToken(); int y = (int) tokens.nval; tokens.nextToken(); int z = (int) tokens.nval;

switch (codeString.charAt(0)) { case 'M': v.addElement(new Movie(x,y,z)); break; case 'S': v.addElement(new Symphony(x,y,z)); break; } }

3 October 2002 Web Technology for IE 34

Specifying Delimiters

• To advise the tokens tokenizer to use double quotation marks to delimit strings:– tokens.quoteChar((int) ‘”’)

• To tell the tokenizer to recognize carriage returns:– tokens.eolIsSignificant(true);

3 October 2002 Web Technology for IE 35

Example (excerpt) tokens.quoteChar((int) '"'); tokens.eolIsSignificant(true); Vector v = new Vector(); while (tokens.nextToken() != tokens.TT_EOF) { String nameString = tokens.sval; tokens.nextToken(); int x = (int) tokens.nval;

tokens.nextToken(); int y = (int) tokens.nval;

tokens.nextToken(); int z = (int) tokens.nval;

Movie m = new Movie(x,y,z); m.title = nameString; if (tokens.nextToken() == tokens.TT_EOL) {} else { m.poster = tokens.sval; tokens.nextToken(); } v.addElement(m); }

3 October 2002 Web Technology for IE 36

Working with O/p File Streams

• To connect to output file– FileOutputStream stream = new

FileOutputStream(“output.data”);

• To write more than 1-byte-at-a-time– PrintWriter writer = new PrintWriter(stream);

• It’s good to flush out buffered characters– writer.flush()

• Close the file– stream.close()

3 October 2002 Web Technology for IE 37

Example (part)import java.io.*; import java.util.*;public class Demonstrate { public static void main(String argv[]) throws IOException {

FileOutputStream stream = new FileOutputStream("output.data");

PrintWriter writer = new PrintWriter(stream); Vector mainVector = Auxiliaries4.readData("input3.data"); int size = mainVector.size();

for (Iterator i = mainVector.iterator(); i.hasNext();) { Movie m = (Movie) i.next(); m.writeToFile(writer); writer.println(m.rating()); } writer.flush(); stream.close(); System.out.println("File written"); }}