Input and Output and Arrays Robots Learning to Program with Java Byron Weber Becker chapter 9 and 10
Announcements (Nov 7 th ) Reading for next Monday Ch 10 ( not covering 10.1.8, 10.7) Program#7 Clarification Driver Exam#2 scheduled for Nov 9 th (Wed 8PM) Sign-up for make-up exam (talk to the instructor by Monday)
Exam#2 Change of room The 168 exam 2 next week will be in CVA ( Center for the Visual Arts) 149 instead of STV 101. http://maps.illinoisstate.edu/locations/center_for_the_vis ual_arts_cva.shtml Coverage (practically comprehensive) ~ program6, ~ Ch7 (including console I/O using Scanner, Sytem.in, and System.out.print*), ~ Lab10 few questions (one or two) related to Robot class Main focus: control structure, write your own classes , inheritance
Facebook using Java? Let’s start with “Person” class “String” name Four “Person” objects to represent four friends Implement toString()
Lab example Person class
Review: Some Scanner Methods String next () Finds and returns the next complete token from this scanner. double nextDouble () Scans the next token of the input as a double – will produce an error if the token is not numeric. int nextInt () Scans the next token of the input as an int – will produce an error if the token is not numeric. String nextLine () Advances this scanner past the next line return and returns the data that was skipped.
Review: Some Scanner Predicates boolean hasNext () Returns true if this scanner has another token in its input stream. boolean hasNextDouble () Returns true if the next token in this scanner's input stream can be interpreted as a double value using nextDouble() boolean hasNextInt () Returns true if the next token in the input stream can be interpreted as an integer value using nextInt() boolean hasNextLine () Returns true if there is another line return in the input stream of this scanner.
Dumping the Input Buffer When you combine the use of nextLine() and any of the other 3 next methods you must take care with new line characters. Sometimes you need to dump the input buffer. This can be done using scan.nextLine();
The Input Buffer The input buffer holds the characters that are being read – whether from the keyboard or from a file. In the Scanner class, next(), nextInt, and nextDouble read up to or over any new line character (ignoring it). The nextLine() method reads through the next new line character and stops at the front of the next line. The new line character is dropped, not returned.
Practice** Write a main method that will allow the user to enter the names (storing the full name) and ages of 5 students. Assume we have a Student class with a constructor that takes a String and int: public Student(String name, int age) Collect and store the data in 5 Student variables.
Review: File Reading The Scanner class can be used to read from a file (instead of the keyboard) with a one small change. Instead of declaring our Scanner as Scanner scan = new Scanner(System.in); We will declare it with a file. First we create the File using File file = new File(“input.txt”); Scanner fScan = new Scanner(file);
Same Old Methods Whether reading from a file or from a keyboard, the Scanner methods work the same. The biggest difference is that from a file you have no user prompts…
Practice Write a main method that will read the file below (alternating lines are integer or text) and echo it to the screen Use nextLine to read the text lines and nextInt for lines with numbers only File name is input.txt 1 this is a text line 2 this is another text line 3 this is the last text line
Writing to a File There are a number of ways to write to a file We will use a PrintWriter object Once the file has been opened, the PrintWriter object works just like using System.out
Exception handeling The try-catch block try { // attempt to do something that might error out } catch (ExeptionType excp) { // print some error message for easy debugging }
Opening a File for Output PrintWriter out = null; try { out = new PrintWriter(“fileName.txt"); System. out .println("file created and open"); } catch (FileNotFoundException excp) { System. out .println(" fileName.txt could not be opened for output"); excp.printStackTrace(); }
Practice** • Change the last practice problem so it first reads 2 lines from the input file, then switches their order to create an output file File name is input.txt File name is output.txt 1 this is a text line this is a text line 1 2 this is another text line this is another text line 2 3 this is the last text line this is the last text line 3
More Practice** Write a main method that requests data from the user and writes it to a file – one data element per line. The data will be A person’s full name – which we will store in all uppercase letters regardless of how it is entered A single word nickname Their current age (as an integer)
Constructor that takes a Scaner** When you are creating a class that will be read from a file it is typical to create a constructor that accepts a Scanner and reads a single record from an opened file The constructor will NOT open or close the file – simply read the next record
Method that takes a Scanner Instead of using the constructor you can create a method for reading a single record When using such a method you must take care not to create aliases
Writing a Record Regardless of which version of reading you use (in a constructor or a method) you need to create a method for writing a single record to an open file This is basically the opposite of the reading method and should create a record in the same format This method will not open or close the file
Tracing Practice Scanner infile = new Scanner(new File(“input.txt”)); int val1, val2; int curVal = infile.nextInt(); val1 = curVal; val2 = curVal; while (infile.hasNext()) { curVal = infile.nextInt(); if (val1 < curVal) { val1 = curVal; } else if (val2 > curVal) { val2 = curVal; } } System.out.println(“Val1: ” + val1 + “\nVal2: ” + val2);
Pseudocode Practice Write pseudocode to read a file that contains course id, room capacity, and current enrollment, in that order, on each line of the file. Read in each row from the file and display the data. In addition, give the number of seats available and a message stating whether or not the class is full. Process the entire file. Example file: Itk168 40 27 Itk261 25 25 Itk150 220 219
Coding Practice Write code to read integers from the keyboard and count the number of odd integers entered. Input should stop when the user enters -1 . Do not count the -1 as one of the odd integers that you’re counting. Prompt the user for input. Be sure to declare all needed variables.
Arrays ITK 168 Spring 2011 Robots Learning to Program with Java Byron Weber Becker chapter 10
Chapter Objectives Store data in an array Primatives Objects Access a single element Process all elements Search for a particular element Insert element
Containers There are a number of “containers” used in programming An Array is one type of container Can contain primitive or objective data Elements are stored consecutively and numbered – starting at zero and counting to one less than the capacity Has a maximum capacity and current size
Declaring and Filling Arrays Declaring an array with no initial elements int[] integers = new int[5]; double[] prices = new double[10]; Person[] people = new Person[25]; Filling an array at declaration int[] numbers = {1, 2, 3, 4, 5};
Walking Through an Array Suppose we have an array of up to 100 integers (of unknown contents) originally declared as int[] scores = new int[100]; int numRecords = 0; Suppose we want to Print the contents Average the contents Print the largest and smallest value Find the first location of a value
For-each Typically used to walk through the entire array – assumes the array has been filled completely Take care with arrays of objects! for(Person person : addressBook) { System. out .println(person); }
Practice Declare an array of integers to hold up to 100 scores Code a loop to get scores from the user until they enter -99 to quit Be sure not to process -99 Print the scores in 4 columns across the rows Print the highest score, lowest score, and average
More Practice Declare an array to hold up to 10 characters Get the 10 characters from your user – requiring all 10 to be entered Print the characters on one row in the order entered Print the characters on one row in the opposite order entered Look for the letter ‘s’ – if entered, return the first index location, if not return -1
Recommend
More recommend