2016-11-16 8 views
0

ファイルからデータを読み込んで2次元配列にロードし、それを画面に印刷しようとしていますが、出力が間違っています:テキストファイルを2D配列に読み込んで画面に印刷しようとしています

出力:

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 

私はtemperature.txtと呼ばれるデータファイルを作成しました。データファイルには、過去10日間の低温の高い数値&が含まれています(低)| (高):

+-------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+ 
| 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 | 
+-------------+-------+-------+-------+-------+-------+-------+-------+-------+-------+-------+ 

そしてここでは、以下の私のコードです:

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"); 
       } 
      } 
     } 


    } 

} 
+1

トークン化: 'tokenizer = new StringTokenizer(line、" | ");' '|'文字で 'space'文字を追加します。おそらく例外は 'NumberFormatException'です。トークンにはこのようなスペースがあります: '1'、 '2'など – rafid059

+0

29 | 30をどのようにint配列に配置しますか? – Jobin

答えて

1

私は別の関数に温度を解析ロジックを移動します。このように:

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 |"); 
    } 
} 

私はむしろそれ専用のクラスを作り、リスト内のすべてのものを返し、あなたは2D配列内の温度を保存したいかどうかはわかりませんでした。必要に応じて、このリストを取り出して配列構造体に入れることができます。

また、数字を囲む空白を削除するためにtrim()を使用しました。これにより、NumberFormatExceptionを取得できなくなります。

関連する問題