Assignment 6, due Oct 6

Part of the homework for CS:2820, Fall 2017
by Douglas W. Jones
THE UNIVERSITY OF IOWA Department of Computer Science

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!

  1. Background: The code for class ScanSupport given at the end of the notes for Lecture 10 on Sept. 26 raises some questions: Consider writing a nextFloat method to add to ScanSupport. A preliminary version of this would be very similar to nextName except that the final two lines would be:
    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)

  2. Background: Look at the code distributed with Lecture 10 last week. Several changes were made from the code presented previously. One change is that several error messages that had been created by concatenating numerous components have been simplified by using this.toString() in place of most of the concatenations.

    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)

  3. Background: In the code distributed with Lecture 10, this code appears:
    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)