2016-11-07 5 views
1

私の問題複数行からオブジェクトを作成します。私はその構造とTXTファイルを持っている.txtファイルに

を:

20:00 Norwich Res-Milton K. 
2.45 
3.30 
2.45 
20:30 Everton Res-Blackpool 
2.24 
3.25 
2.73 

何私がしたいことは、テキストファイルを読み込み、内部データからオブジェクトを作成することです。私が必要とする一つの目的は、すなわちある(1つのオブジェクトのフィールド):。

20:00 Norwich Res-Milton K. (String) 
    2.45 (double) 
    3.30 (double) 
    2.45 (double) 
... 

私の方法は、TXTからデータを読み出すために:

public ArrayList<Match> getMatches(){ 
    try{ 
     File file = new File("matches.txt"); 
     FileReader readerF = new FileReader(file); 
     BufferedReader reader = new BufferedReader(readerF); 

     String line = null; 

     while((line = reader.readLine()) !=null){ 
       //here i dont know what to do 
     } 
    } 
    catch(Exception e){ 
     JOptionPane.showMessageDialog(null, ""); 
    } 
    return matches; 
} 

あなたはそれを行う方法を任意のヒント/トリックを持っていますか?

マイマッチクラス:

public class Match { 

     private String matchName; 
     private double course1; 
     private double courseX; 
     private double courseY; 

     public Match(String matchName, double course1, double courseX, double courseY){ 
      this.matchName=matchName; 
      this.course1=course1; 
      this.courseX=courseX; 
      this.courseY=courseY; 

    } 

} 
+2

あなたは新しい物の冒頭にいます。その行を使用して、次の3行と一緒に新しいオブジェクトを作成し、それを他の変数に変換します。 –

+0

可能性があります: 'if(line.contains(": "))String tempStr =行; else tempDbl = Double.parseDouble(line.trim()); '注意:これはファイル構造であるかどうかによって異なりますが、すべてのケースが処理されるようにしてください。また、一時変数は、スコープが緩くなるため、印刷/保存する必要があります。 –

答えて

0

(私はあなたがそうでなければ例外を処理する必要がある場合がありますので、入力ファイルが有効であると仮定しています)、これを試してみてください:「:」あなたは知っている行が含まれている場合、それぞれの行をつかむ

 public ArrayList<Match> getMatches(){ 
     try{ 
      File file = new File("matches.txt"); 
      FileReader readerF = new FileReader(file); 
      BufferedReader reader = new BufferedReader(readerF); 

      String line = null; 
      String matchName = null; 
      double course1; 
      double courseX; 
      double courseY; 
      ArrayList<Match> matches = new ArrayList<>(); 
      int count = 0; 

      while((line = reader.readLine()) !=null){ 
        if (count%4 == 3) { 
         Match match = new Match(line, course1, courseX, courseY); 
         matches.add(match); 
        } else if (count%4 == 2) { 
         courseY = Double.parseDouble(line); 
        } else if (count%4 == 1) { 
         courseX = Double.parseDouble(line); 
        } else { 
         course1 = Double.parseDouble(line); 
        } 
        count++; 
      } 
     } 
     catch(Exception e){ 
      JOptionPane.showMessageDialog(null, ""); 
     } 
     return matches; 
    } 
+0

最初のif命令をelse命令で置き換える必要がありましたが、とにかく: それが動作します。どうもありがとう! –

2

ヒント:"//here i dont know what to do"ためのロジックはこのようなものである必要があります:

  1. は、このAであり、いくつかの答え

    EDITため どうもありがとう新しい試合を開始するライン?

  2. はい場合:
    1. があります:
    2. 新しい一致レコードを作成
      1. は成分を抽出するために行を解析
    3. なしの場合、それを現在のマッチ記録を作ります現在のマッチレコード?いいえの場合は、エラーです。
    4. 数値を行として解析します。
    5. 現在の一致レコードに新しい番号を追加します。