











Study with the several resources on Docsity
Earn points by helping other students or get them with a premium plan
Prepare for your exams
Study with the several resources on Docsity
Earn points to download
Earn points by helping other students or get them with a premium plan
Scanner input = new Scanner(new File(hours.txt)); while (input. ... Processes an employee input file and outputs each employee's hours. import java.io.
Typology: Slides
1 / 19
This page cannot be seen from the preview
Don't miss anything!












Hours answer (flawed) // This solution does not work! import java.io.; // for File import java.util.; // for Scanner public class HoursWorked { public static void main(String[] args) throws FileNotFoundException { Scanner input = new Scanner(new File("hours.txt")); while (input.hasNext()) { // process one person int id = input.nextInt(); String name = input.next(); double totalHours = 0.0; int days = 0; while ( input.hasNextDouble() ) { totalHours += input.nextDouble() ; days++; } System.out.println(name + " (ID#" + id + ") worked " + totalHours + " hours (" + (totalHours / days) + " hours/day)"); } } }
Flawed output Ross (ID#123) worked 488.3 hours ( 97.66 hours/day) Exception in thread "main" java.util.InputMismatchException at java.util.Scanner.throwFor(Scanner.java:840) at java.util.Scanner.next(Scanner.java:1461) at java.util.Scanner.nextInt(Scanner.java:2091) at HoursWorked.main(HoursBad.java:9) The inner while loop is grabbing the next person's ID. We want to process the tokens, but we also care about the line breaks (they mark the end of a person's data).
First, break the overall input into lines. Then break each line into tokens.
Consuming lines of input 23 3.14 John Smith "Hello" world 45.2 19
23 \t3.14 John Smith\t"Hello" world\n\t\t45.2 19 \n ^ String line = input.nextLine(); 23 \t3.14 John Smith\t"Hello" world \n\t\t45.2 19 \n ^ String line2 = input.nextLine(); 23 \t3.14 John Smith\t"Hello" world\n \t\t45.2 19 \n ^ Each \n character is consumed but not returned.
Scanners on Strings
Scanner __ = new Scanner( __ ); Example: String text = "15 3.2 hello 9 27.5"; Scanner scan = new Scanner(text) ; int num = scan.nextInt(); System.out.println(num); // 15 double num2 = scan.nextDouble(); System.out.println(num2); // 3. String word = scan.next(); System.out.println(word); // "hello"
Hours question
123 Alex 12.5 8.2 7.6 4. 456 Alina 4.2 11.6 6.3 2.5 12. 789 Ryan 16.0 12.0 8.0 20.0 7. Consider the task of computing hours worked by each person: Alex (ID#123) worked 32.3 hours (8.075 hours/day) Alina (ID#456) worked 36.6 hours (7.32 hours/day Ryan (ID#789) worked 63.5 hours (12.7 hours/day)
Hours answer, corrected // Processes an employee input file and outputs each employee's hours. import java.io.; // for File import java.util.; // for Scanner public class Hours { public static void main(String[] args) throws FileNotFoundException { Scanner input = new Scanner(new File("hours.txt")); while (input.hasNextLine()) { String line = input.nextLine(); processEmployee(line); } } public static void processEmployee(String line) { Scanner lineScan = new Scanner(line); int id = lineScan.nextInt(); // e.g. 456 String name = lineScan.next(); // e.g. ”Erika" double sum = 0.0; int count = 0; while (lineScan.hasNextDouble()) { sum = sum + lineScan.nextDouble(); count++; } double average = sum / count; System.out.println(name + " (ID#" + id + ") worked " + sum + " hours (" + average + " hours/day)"); } }
Output to files
Any methods you have used on System.out (such as print, println) will work on a PrintStream. Syntax: PrintStream __ = new PrintStream(new File(" __ ")); Example: PrintStream output = new PrintStream(new File("out.txt")); output.println("Hello, file!"); output.println("This is a second line of output.");
Details about PrintStream PrintStream __ = new PrintStream(new File(" __ ")); If the given file does not exist, it is created. If the given file already exists, it is overwritten. The output you print appears in a file, not on the console. You will have to open the file with an editor to see it. Do not open the same file for both reading (Scanner) and writing (PrintStream) at the same time. You will overwrite your input file with an empty file (0 bytes).
PrintStream question
The program will produce no console output. But the file hours_out.txt will be created with the text: Ross (ID#123) worked 32.3 hours (8.075 hours/day) Erika (ID#456) worked 36.6 hours (7.32 hours/day Alex (ID#789) worked 63.5 hours (12.7 hours/day)
PrintStream answer // Processes an employee input file and outputs each employee's hours. import java.io.; // for File import java.util.; // for Scanner public class Hours2 { public static void main(String[] args) throws FileNotFoundException { Scanner input = new Scanner(new File("hours.txt")); PrintStream out = new PrintStream(new File("hours_out.txt")); while (input.hasNextLine()) { String line = input.nextLine(); processEmployee(out, line); } } public static void processEmployee( PrintStream out, String line) { Scanner lineScan = new Scanner(line); int id = lineScan.nextInt(); // e.g. 456 String name = lineScan.next(); // e.g. ”Erika" double sum = 0.0; int count = 0; while (lineScan.hasNextDouble()) { sum = sum + lineScan.nextDouble(); count++; } double average = sum / count; out.println (name + " (ID#" + id + ") worked " + sum + " hours (" + average + " hours/day)"); } }
File Scanner Question
Email domain to spam? @gmail.com Would you like to spam [email protected]? yes
Schmerlock Schmolmes