Reputation: 9
I'm trying to read data from a file and load into a two dimensional array and then print it to the screen but I got the wrong output:
Output:
Analysis report of the temperatre reading for the past 10 days
The code throws an exception
The code throws an exception
The code throws an exception
The code throws an exception
The code throws an exception
The code throws an exception
The code throws an exception
The code throws an exception
The code throws an exception
I created a data file called temperature.txt. The data file contains the high & low temp for the past 10 days in the format (low) | (high):
+-------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+
| Day | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
+-------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+
| Temperature | 30|32 | 29|30 | 25|28 | 25|29 | 27|31 | 28|32 | 26|30 | 24|32 | 24|41 | 27|32 |
+-------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+
And here is my code below:
import java.util.StringTokenizer;
import java.io.*;
public class Temperature {
public static void main(String[] args) {
StringTokenizer tokenizer;
String line;
String file="temperature.txt";
int[][] temp=new int[10][2];
int sumHigh, sumLow;
FileReader fr=null;
BufferedReader br=null;
try
{
fr=new FileReader(file);
br=new BufferedReader(fr);
line=br.readLine();
System.out.println("Analysis report of the temperature reading for the past 10 days " + line);
for(int row=0; row<temp.length; row++)
{
tokenizer=new StringTokenizer(line, "|");
if(row != 0)
{
try
{
if(row % 2 == 0)
{
sumHigh = Integer.parseInt(tokenizer.nextToken());
temp[row][1]=Integer.parseInt(tokenizer.nextToken());
}
else if (row % 2 != 0)
{
sumLow = Integer.parseInt(tokenizer.nextToken());
temp[row][0]=Integer.parseInt(tokenizer.nextToken());
}
}
catch(Exception e)
{
System.out.println("The code throws an exception");
}
}
}
br.close();
}
catch(FileNotFoundException e)
{
System.out.println("The file " + file + " was not found");
}
catch(IOException e)
{
System.out.println("Reading error");
}
catch(NumberFormatException e)
{
System.out.println("Parsing error");
}
finally
{
if(fr != null)
{
try
{
fr.close();
}
catch(IOException e)
{
System.out.println("Reading error");
}
}
}
}
}
Upvotes: 0
Views: 194
Reputation: 2036
I would move out the logic that parses the temperatures into a separate function. Like this:
public class Temperature {
public static class MinMax {
private int min;
private int max;
public MinMax(int min, int max) {
this.min = min;
this.max = max;
}
public int getMin() {
return this.min;
}
public int getMax() {
return this.max;
}
}
private static List<MinMax> getTemperatures(String line) {
List<MinMax> minMaxList = new ArrayList<>(10);
StringTokenizer tokenizer = new StringTokenizer(line, "|");
System.out.println(tokenizer.nextToken().trim()); //prints out Temperature
while(tokenizer.hasMoreTokens()) {
int minimum = Integer.valueOf(tokenizer.nextToken().trim());
int maximum = Integer.valueOf(tokenizer.nextToken().trim());
minMaxList.add(new MinMax(minimum, maximum));
System.out.println("Day " + (minMaxList.size()) + ": Minimum: " + minimum + " Maximum: " + maximum);
}
return minMaxList;
}
public static void main(String[] args) {
getTemperatures("| Temperature | 30|32 | 29|30 | 25|28 | 25|29 | 27|31 | 28|32 | 26|30 | 24|32 | 24|41 | 27|32 |");
}
}
I wasn't sure how you would like to store the temperatures in a 2d array, so rather made a dedicated class for it and returned everything in a list. You can then take this list and put it into an array structure if you like.
Also notice I used trim()
to remove the whitespace surrounding the numbers. This prevents you from getting a NumberFormatException.
Upvotes: 1