Assignment 6, due Oct 6
Part of
the homework for CS:2820, Fall 2017
|
Assignments are to be turned in on paper. On every assignment, write your name, course and section number at the top. Write your name as it appears in your university records! Use the section number for which you are registered! We will not do detective work to figure out who did what. Work must be legible. Homework is due on paper in discussion section, usually at the start except when the assignment indicates that time to work on the assignment will be provided in class. Exceptions will be made only by advance arrangement with your TA (excepting "acts of God" outside your control). Never push homework under someone's door!
sc.skip( number ); return Float.parseFloat( sc.match().group() );
a) ScanSupport has no tools equivalent to the hasNext methods of the scanner. If there is no next name on the current input line, what does nextName() return? (This has an impact on the pattern you use and it is the origin of an error in the above code.) (0.5 points)
b) Give a declaration for the pattern named number above that recognizes 10, 9.12, 87. and .6345 (for example), as well as handling the possibility that there is no floating point number before the end of line. (0.5 points)
c) Fix the code given above so that it returns Float.NaN if there is no next floating point number on the current input line. (That's a special float value that represents something that is not a number. If you have a float named f, f.isNaN() tests to see if the value is not a number.) (0.5 points)
A question: Why not use this.toString to replace the concatenations in other error messages. For example, why not replace the no-such-intersection error messages in Road? (0.5 points)
if (sc.hasNextFloat()) { travelTime = sc.nextFloat(); if (travelTime < 0.0F) { Errors.warn( "Negative travel time:" + this.toString() ); travelTime = 99999.0F; // no failure needed, use bogus value } } else { Errors.warn( "Floating point travel time expected: Road " + sourceName + " " + dstName ); travelTime = 99999.0F; // no failure needed, use bogus value }
Assume you have written ScanSupport.nextFloat(sc,message) where the message parameter is the context part of the error message to output if there is no next float, and where it returns Float.NaN if there is no next float.
A question: Rewrite the above code to use this version of ScanSupport.nextFloat. (1 point)