2016-04-05 9 views
0

私は、テキストファイルの各行を繰り返し処理するプログラムをJavaで作成しています。このテキストファイルには、別々の行にある番号が含まれています。プログラムが各行を読み込んで新しいファイルに出力しました。このファイルの行の平均を印刷するにはどうすればよいですか?

しかし、これらの数値の平均値を新しいファイルにも印刷しようとしていますが、各行を浮動小数点または二重として処理する必要があることを理解していますが、これを行う方法がわからない、これは私が今までに持っているものです。

import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.FileReader; 
import java.io.FileWriter; 
public class Run { 

public static void main(String[] args) throws Exception { 
    Write(); //call Write method 
} 

public static void Write() throws Exception { 
    String line, lineCut; 
    BufferedReader br = null; //initialise BR- reads text from file 
    BufferedWriter bw = null; //initialise BR- writes text to file 
    try 
    { 
     br = new BufferedReader(new FileReader("/Users/jbloggs/Documents/input.txt")); //input file 
     bw = new BufferedWriter(new FileWriter("/Users/jbloggs/Desktop/output.txt")); //output file 

     line = br.readLine(); // declare string equal to each line 
     while(line != null) { // iterate over each line 

      lineCut = line.replaceAll(";" , ","); // replace ; with , 

      //lineCut = line.substring(1, line.length()); 
      //int mynewLine = Integer.parseInt(lineCut); 

      bw.write(lineCut); // write each line to output file 
      bw.write("\n"); // print each line on a new line 
      line = br.readLine(); 
     } 

     System.out.println("success"); //print if program works 
     br.close(); 
     bw.close(); 
     } 

    catch(Exception e){ 
     throw(e); // throw exception 
    } 
    } 
} 
+0

はDouble.parseDouble(文字列)またはを参照してくださいFloat.parseFloat(String) – ControlAltDel

+0

入力の例を示してください。各行には1つの番号が含まれていますか? (そのような場合になぜ '.replaceAll'をやっているのかはわかりません)。概念的には、行の各要素をトークン化した位置に行を取得します。 'Double.parseDouble'などを使って数値を取得します。これをアキュムレータに追加します。平均を計算する。 – KevinO

答えて

-1

テストされていません。私は、それぞれの行には数字とそれ以外のものはないと考えています。文字列から浮動小数点への変換中に例外が発生するのを避けるために、行頭のvalouをチェックしてください。

public static void Write() throws Exception { 
    String line, lineCut; 
    BufferedReader br = null; //initialise BR- reads text from file 
    BufferedWriter bw = null; //initialise BR- writes text to file 
    try 
    { 
     br = new BufferedReader(new  FileReader("/Users/jbloggs/Documents/input.txt")); //input file 
     bw = new BufferedWriter(new FileWriter("/Users/jbloggs/Desktop/output.txt")); //output file 

     line = br.readLine(); // declare string equal to each line 
     float sum = 0; 
     int counter = 0; 

     while(line != null) { // iterate over each line 

      lineCut = line.replaceAll(";" , ","); 
      sum += Float.parseFloat(lineCut); 
      counter++; 

      bw.write(lineCut); // write each line to output file 
      bw.write("\n"); // print each line on a new line 
      line = br.readLine(); 
     } 

     bw.write("Average = "); 
     bw.write(sum/counter); 
     bw.write("\n"); 

     System.out.println("success"); //print if program works 
     br.close(); 
     bw.close(); 
    } 

    catch(Exception e){ 
     throw(e); // throw exception 
    } 
    } 
} 
+0

これは最終的な解決に手伝ってくれました、ありがとうございました! –

0

基本的にこれはあなたが交換したファイルからの行

  • を読ん

    • をやっていることです ';'上記の各操作にように、新しいファイルへ

    を、この変更されたラインを書いて「」

  • で、あなたはNumberする行を処理することがありません。平均見つけるには、などDouble.parseDouble("21.2")、実際のNumberに多数の各行を解析する必要があり、各反復では、あなたは、例えば :-)何をすべきか知っている:

    double sum= 0; 
    int count = 0; 
    while(line != null) { // iterate over each line 
    
        lineCut = line.replaceAll(";" , ","); // replace ; with , 
    
        //lineCut = line.substring(1, line.length()); 
        int num = Double.parseDouble(lineCut); 
        sum = sum + num; count++; 
        bw.write(lineCut); // write each line to output file 
        bw.write("\n"); // print each line on a new line 
        line = br.readLine(); 
    } 
    
    br.write(String.valueOf(sum/count)); 
    
  • 関連する問題