2016-04-05 2 views
0

Ich schreibe ein Programm in Java, das über jede Zeile einer Textdatei iteriert, diese Textdatei enthält Zahlen, die sich in einer separaten Zeile befinden. Ich habe das Programm erfolgreich dazu gebracht, jede Zeile zu lesen und in eine neue Datei zu drucken.Wie kann ich den Durchschnitt der Zeilen in dieser Datei drucken?

Ich versuche jedoch, den Durchschnitt dieser Zahlen auf die neue Datei zu drucken, ich verstehe, dass ich jede Zeile als float oder double behandeln müsste (da ich Dezimalzahlen verwende), aber ich ' Ich bin mir nicht sicher, wie ich das machen soll, das ist es, was ich bisher habe.

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

siehe Double.parseDouble (String) oder Float.parseFloat (String) – ControlAltDel

+0

Geben Sie ein Beispiel für die Eingabe an. Enthält jede Zeile eine einzelne Nummer? (Nicht sicher, warum Sie in einem solchen Fall '.replaceAll' machen). Stellen Sie die Linie konzeptionell so ein, dass Sie Token für jedes Element in der Linie haben. Verwenden Sie 'Double.parseDouble' oder ähnlich, um den numerischen Wert zu erhalten. Fügen Sie es einem Akkumulator hinzu. Berechnen Sie den Mittelwert. – KevinO

Antwort

-1

Nicht getestet. Ich denke, jede Zeile hat eine Nummer und sonst nichts. Denken Sie daran, dass Sie das Valou on linecount überprüfen sollten, um eine Ausnahme während der Konvertierung von String zu Float zu vermeiden.

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

Dies half viel bei der endgültigen Lösung, vielen Dank! –

0

Im Grunde ist es das, was Sie

  • liest Zeilen aus einer Datei
  • ersetzen tun ';' mit a ‚‘
  • schreibe diese modifizierte Zeile in eine neue Datei in jeder der obigen Operation

So haben Sie nie ein Number die Linie sein behandelt. Für Durchschnitt, müssen Sie jede Zeile Nummer in reale Number analysieren, Double.parseDouble("21.2") usw., und in jeder Iteration, wissen Sie, was :-) Zum Beispiel zu tun:

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)); 
Verwandte Themen