COMP102/112 2022 Tri 1: Assignment 5Due 28 Apr 10am
GoalsThis assignment will give you more experience in writing programs that read data from a file and do something with the data. It will also give you more practice using conditionals and loops.
Resources and links
- Download Zip file of necessary code and data.
- Submit your answers.
- Asking for online assistance: web form or mailto:firstname.lastname@example.org
- Marks and Feedback (When available)
PreparationDownload the zip file for assignment 5 and extract it to the
COMP-102-112-2022T1-Assig5folder in your home folder. It should contain templates for the Java program you are to complete, along with data files. Read through the whole assignment and run or view the demo so that you know what you need to do. Later when the model answer to assignment 4 becomes available, make sure you understand all the components of the programs. Also, go over the code examples from the lectures that read files.
- GraphPlotter: Write a program to plot a file of numbers
- Completion and Challenge
- Weather Data: Write a program to analyse weather data from files of weather-station measurements.
To SubmitYour version of
WeatherReporter.java(Completion and Challenge questions)
Graph PlotterIn Assignment 4, you wrote a program to read a sequence of numbers from the user, and then plot them as a bar graph. For this assignment, you are to write a program to read a sequence of numbers from a file (one number per line) and plot the numbers using +'s for each point. You can run the
GraphPlotterdemo program in the demonstrations folder to see what the program should do. You can also view the demo video. The program should ask the user for the name of a file, then draw the graph: two axes and +'s for each number.
Note: to draw a + at (x,y), draw a line from (x-2,y) to (x+2,y) and a line from (x,y-2) to (x,y+2) The points should be spread out evenly to fit the graph (if there are lots of numbers in the file, the +'s will be very close; if there are only a few numbers in the file, they will be spread out. Here is an example of the graph of the numbers in the file numbers1.txt.
Completion and Challenge
Weather ReporterTelevision and internet weather reports provide graphical visualisations and reports of weather data, using data about temperatures, pressures, windspeed, etc from a weather database. For this assignment, you are to write a program that produces a graphical visualisation and a simple report of some New Zealand weather data stored in files. You can run the
WeatherReporterdemo program in the demonstrations folder to see what the program should do. You can also view the demo video. The weather data (extracted from online MetOffice weather data from 24-26 January 2021) consists of measurements from weather stations around NZ at every three hours over the three day period. Each weather station reports measurements of temperature, dew-point, surface pressure, and sea-level pressure. The format of the data files consists of a series of "snapshots" of the data over the country. Each snapshot has
- a header line with the date and time of the snapshot (four integers for day, month, year, and time)
- a second header line with the number of weather-stations with reported measurements in the snapshot (which varies with the snapshot)
- a series of lines of data for each weather station. Each line has
- station name: one token, eg "Cape-Reinga"
- (x, y) coordinates on the map: two numbers, eg 186 38
- four numbers for temperature, dew-point, suface-pressure, and sea-level-pressure
plotTemperatures()should plot the temperatures for the first snapshot in a file on a map of New Zealand. For each weather station in the snapshot, it should draw a small circle on the map at the location of the weather station. The colour of the circle should show the temperature (colder temperatures should be more blue and hotter temperatures should be more red). It is good design to break this into two methods:
- Ask for the name of the weather data file and open a Scanner on the file
- Call plotSnapshot, passing the Scanner as an argument, to plot one snapshot from the file.
- Draw the map (in the file "map-new-zealand.gif")
- Read the date and time from the first header line and draw the date/time at the top-left of the map.
- Read the number of stations from the second header line, then
- For each station,
- Read the name, coordinates, and data, and
- Plot the temperature for that station at the coordinates
getTemperatureColor(...)method useful to work out the right color for a given temperature. Hint: You should use the constants
TOP_TEXT, for drawing the date/time and the constant
DIAMfor drawing the circles.
plotShapshot(...)so that it also identifies the highest and lowest temperatures from the weather stations in the snapshot and plots those temperatures with a larger circle (double the size of the other temperatures).
- Complete the
animateTemperatures()method so that it displays an animated view of all the snapshots in a file, displaying each snapshot in turn, pausing briefly (half a second) between each snapshot.
If you reuse
animateTemperatures()should be very simple.
Note: since there is only one data file with multiple snapshots, your method can read from
weather-all.txtwithout asking the user for the name of the file.
- Complete the
reportStation()method to print a table of all the weather data from a single station, one line for each snapshot in the file. The method should:
- Ask for the name of the station.
- Print a header for the table
- Then for each line of data for that station in the weather-all.txt file, it prints a line in the table with the date/time, temperature, dew-point, surface-pressure, and sea-level-pressure
- If there are no entries for that station, it will print a message saying "Station not found".
To go furtherIt is important to understand how Java works, as well as writing programs in Java.
- When do we call a method on
this, and when do we call a method on something else, such as
UIor a String?
- Dealing with files that have header lines is different from dealing with files without header lines. What approaches do you use to design methods that work on the different kinds of files?