CSC212 Homework 3 2014
--D. Thiebaut (talk) 16:21, 24 September 2014 (EDT)
This homework is due on Oct. 2nd, 2014, at 11:55 p.m.
Contents
Problem #1
- Create a text file in your directory with the following lines. Call it temperatures0.dat:
1977 9 18.3 8.1 0 48.6 117.9
1977 10 15.4 9.0 0 76.0 80.4
1977 11 10.3 4.7 4 147.9 76.4
1977 12 9.6 4.6 2 88.0 25.6
1978 1 7.5 2.0 6 134.1 64.7
1978 2 6.2 0.9 13 134.1 56.9
1978 3 10.6 3.9 3 121.3 122.4
1978 4 10.9 3.7 4 63.6 118.6
1978 5 17.3 7.5 0 30.6 188.1
1978 6 18.5 9.5 0 29.6 177.3
1978 7 18.7 11.8 0 110.1 115.8
1978 8 19.6 11.4 0 40.5 164.9
1978 9 18.4 10.2 0 34.1 182.2
1978 10 16.6 9.0 0 12.0 81.1
These numbers are weather numbers for Cardiff Bute Park, in the U.K. The 7 numbers on each line represent the following quantities, shown here with their standard abbreviation:
- the year of the recording (yyyy)
- the month of the recording (mm)
- the max daily temperature in degrees Celcius (tmax)
- the min daily temperature in degrees Celcius (tmin)
- the number of days of frost (af)
- the total rainfall (rain)
- the sunshine duration (sun)
Your Assignment
- Write a program called Hw3_1.java that will
- read the temperature file,
- record the year when the rain was maximum,
- record the year when the sun was maximum,
- output this information on two lines of text:
javac Hw3_1.java java Hw3_1 temperatures0.dat rain 1977 147.90 sun 1978 188.10
Submission
- Submit your program to Moodle, Homework 3, Problem 1. (not available yet...Stay tuned!)
Problem #2
- Create a new version of your program and call it Hw3_2.java.
- Create a new text file called temperatures.dat, with the contents found below:
Cardiff Bute Park
Location 3176E 1773N, 9 metres amsl
Estimated data is marked with a * after the value.
yyyy mm tmax tmin af rain sun
degC degC days mm hours
1977 9 18.3 8.1 0 48.6 117.9
1977 10 15.4 9.0 0 76.0 80.4
1977 11 10.3 4.7 4 147.9 76.4
1977 12 9.6 4.6 2 88.0 25.6
1978 1 7.5 2.0 6 134.1 64.7
1978 2 6.2 0.9 13 134.1 56.9
...
2009 7 20.2 13.1 0 194.1 ---
2009 8 20.7 --- 0 76.0 120.5
2009 9 19.1 10.6 0 34.7 ---
2009 10 16.3 8.6 0 73.6 ---
2009 11 12.6 6.5 0 220.4 ---
2009 12 7.2 0.0 15 114.9 ---
2010 1 6.0 -1.2 16 73.5 ---
2010 2 7.3 0.8 7 72.1 ---
- You will notice that the new file will contain lines other than data lines (like the header), and that some data are missing, and replaced by "---". Your program has to be able to skip these non-data without problems. In particular, without generating exceptions to the operating system!
- Using the program you wrote for Lab #5, build Hw3_2.java so that it will look for the max rain and sun recordings, and output 2 lines with the years and the max numbers found.
Requirements
- The output format should be the same as for Problem 1.
- You must declare and use your own exception class.
- You must use a method to open the file,
- You must use another method that reads only 1 line at a time from the input file and returns the year, rain and sun data found on that line. You can use an array or a triplet to pass these numbers back to the main program.
Submission
- Submit your program to Moodle, Problem 2 Section.
Problem #3
- Convert the Python-List class shown below to a generic class.
public class PythonList2 { private String[] array = null; private int maxdim; private int end = 0; PythonList2(int m) { maxdim = m; end = 0; array = new String[maxdim]; } PythonList2() { this(100); } private boolean isValid( int i ) { return ( i >= 0 && i < end ); } public void setAt( int i, String n ) { if ( ! isValid( i ) ) return; array[i] = n; } public int index( String n ) { for ( int i=0; i < end; i++ ) { if ( at(i) == n ) return i; } return -1; } public int rindex( String n ) { for ( int i=end-1; i >= 0; i-- ) if ( array[i]==n ) return i; return -1; } public void append(String n) { if (end <= array.length - 1) { array[end++] = n; return; } String[] temp = new String[maxdim * 2]; for (int i = 0; i < array.length; i++) temp[i] = array[i]; array = temp; array[end++] = n; maxdim = maxdim * 2; } public int length() { return end; } public String at(int index) { if (index >= 0 && index < array.length) return array[index]; else return null; } public static void main(String[] args) { // --- Test List --- PythonList2 dwarves = new PythonList2(5); dwarves.append("Blick"); dwarves.append("Flick"); dwarves.append("Glick"); dwarves.append("Plick"); dwarves.append("Quee"); dwarves.append("Snick"); dwarves.append("Whick"); System.out.println("Snow White's friends:"); for (int i = 0; i < dwarves.length(); i++) System.out.println(dwarves.at(i)); String dwarf; dwarf = dwarves.at(-1); if (dwarf != null) System.out.println(dwarf); dwarf = dwarves.at(20); if (dwarf != null) System.out.println(dwarf); int n = dwarves.index( "Quee" ); if ( n != -1 ) System.out.println( "Quee found at Index: " + n ); else System.out.println( "Quee not found" ); n = dwarves.rindex( "Quee" ); if ( n != -1 ) System.out.println( "Quee found at Index: " + n ); else System.out.println( "Quee not found" ); n = dwarves.index( "Queen" ); if ( n != -1 ) System.out.println( "Queen found at Index: " + n ); else System.out.println( "Queen not found" ); } }
- Call your program Hw3_3.java.
- Test it thoroughly. Your class will be tested by another test class that will be using it to implement lists of ints, lists of doubles, list of strings, and list of booleans, and appending, searching, or locating items at various indexes.
Submission
- Submit your program to Moodle, Homework 3, Problem 3. (not available yet...Stay tuned!)