2014-03-06 104 views
0

嘿所以我們的目標是從一個文本文件讀取運動數據並將該數據的摘要打印到另一個文本文件。輸入文件包含幾個記錄從txt文件 樣品輸入如下:Java文件輸入和數據處理到文件輸出

1) Joe Schmoe 
    76.5 20 30 25 10 75.9 
    Jilly Momilly Schmill 
    50.5 30 30 35 37 28 32 35 34 34 49.2 
    Gail Quail 
    62.3 15 17 10 3 10 63.6 
    Frank Crank 
    83.2 5 83.2 
    John Quann 
    57.9 30 32 35 32 30 57.2  

我的問題是我不能讓我的代碼來讀取每個人我只能得到它讀取的第一個或發送給我一個無限循環或輸入不匹配。 繼承人我的代碼:

`//Doubler.java 
import java.util.Scanner; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.InputMismatchException; 
import java.io.IOException; 
import java.io.BufferedWriter; 
import java.io.BufferedReader; 
import java.io.FileOutputStream; 
import java.io.OutputStreamWriter; 
import java.io.Writer; 
import java.io.PrintWriter; 
import java.util.Scanner; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.FileNotFoundException; 
import java.io.EOFException; 
import java.io.IOException; 

public class ExerciseSummary 
{ 
    private Scanner inputStream = null; 
    private PrintWriter outputStream = null; 
    private int next = 0; 
    private int sum = 0; 
    private int count = 0; 
    private double avg = 0; 
    private double firstWeight = 0; 
    private double lastWeight = 0; 
    private String line; 

    public static void main(String[] args) 
     { 
     ExerciseSummary summary = new ExerciseSummary(); 
     summary.connectToInputFile(); 
     summary.connectToOutputFile(); 
     summary.summaryData(); 
     summary.closeFiles(); 
     System.out.println("\nAll numbers from the input file have been"); 
     System.out.println("summarized and copied to the output file."); 
    } 

    public void connectToInputFile() 
    { 
     String inputFileName = getFileName("\nEnter name of input file: "); 
     try 
     { 
      inputStream = 
       new Scanner(new File(inputFileName)); 
     } 
     catch(FileNotFoundException e) 
     { 
      System.out.println("File " + inputFileName + " not found."); 
      System.exit(0); 
     } 
     catch(IOException e) 
     { 
      System.out.println("Error opening input file " + inputFileName); 
      System.exit(0); 
     } 
    } 

    private String getFileName(String prompt) 
    { 
     String fileName = null; 
     System.out.print(prompt); 
     Scanner keyboard = new Scanner(System.in); 
     fileName = keyboard.next(); 
     return fileName; 
    } 

    public void connectToOutputFile() 
    { 
     String outputFileName = getFileName("Enter name of output file: "); 
     try 
     { 
      //outputStream = new PrintWriter(outFile); 
      outputStream = 
       new PrintWriter(outputFileName); 
     } 
     catch(IOException e) 
     { 
      System.out.println("Error opening output file " + outputFileName); 
      //System.out.println(e.getMessage()); 
      System.exit(0); 
     } 
    } 

    public void summaryData() 
    { 
     try 
     { 
      while (inputStream.hasNext()); 
      { 
       line = inputStream.nextLine(); 
       firstWeight = inputStream.nextDouble(); 
       while (inputStream.hasNextInt()) 
       { 
          sum += inputStream.nextInt(); 
        count ++; 
        avg = (sum/count); 
        } 
       lastWeight = inputStream.nextDouble(); 
         outputStream.println(line + " " + firstWeight + " " + sum + " " + count + " " + lastWeight + " " + avg + " " + (lastWeight-firstWeight)); 
      } 
     } 
     catch (InputMismatchException e) 
     { 
      System.out.print(e); 
      System.exit(0); 
     } 
    } 

    public void closeFiles() 
    { 
      inputStream.close(); 
      outputStream.close(); 
    } 
}  

輸出記錄輸入記錄的摘要。它由TAB分隔的四個值組成:該參與者的數據天數,行使的總分鐘數,每天運動的平均分鐘數以及失去的總體重量(如果參與者體重增加,這將是負面的) 。該名稱已被讀入,但未再打印出來(我們正在匿名數據)。對於上面的記錄,該主題的名字是Joe Schmoe,他的起始重量是76.5kg。喬鍛鍊了四天(起始體重和最終體重之間有四個整數值),總共85分鐘(20 + 30 + 25 + 10 = 85)。他的最終體重是75.9公斤。輸出記錄是: 4 85 21.25 0.5999999999999943

我一直令人頭大我的大腦兩週任何幫助會這麼不勝感激謝謝

+0

無限循環或輸入不匹配發生在哪裏? – Houseman

+0

它要求輸入文件的名稱後,它會進入無限循環 – user3389626

+0

你可以發佈第一個人的預期輸出嗎? – JohnnyAW

回答

0

無限循環:

while (inputStream.hasNext()); 
     { 
      line = inputStream.nextLine(); 
      firstWeight = inputStream.nextDouble(); 
      while (inputStream.hasNextInt()) 
      { 
         sum += inputStream.nextInt(); 
       count ++; 
       avg = (sum/count); 
       } 
      lastWeight = inputStream.nextDouble(); 
        outputStream.println(line + " " + firstWeight + " " + sum + " " + count + " " + lastWeight + " " + avg + " " + (lastWeight-firstWeight)); 
     } 

「;」之後「while(inputStream.hasNext())」是一個空的表達式,所以java簡單地執行「;」而inputStream.hasNext()和不消耗文件

下一個問題,InputMissmatchException: 你需要這行掃描器:

inputStream = 
      new Scanner(new File("C:\\Test\\readTest.txt")); 
inputStream.useLocale(Locale.ENGLISH);//this will help to interpret "." as decimal character 

和最後一個問題,你需要這2條線在年底而消費的「換行」字符:

lastWeight = inputStream.nextDouble(); 
        outputStream.println(line + " " + firstWeight + " " + sum + " " + count + " " + lastWeight + " " + avg + " " + (lastWeight-firstWeight)); 
if(inputStream.hasNext()) 
    inputStream.next(); // or even inputStream.nextLine(); 

現在我得到的第一人: 喬蠢貨76.5 85 75.9 4 21.0 -0.5999999999999943 是正確的結果?

+0

感謝甚至沒有注意到,現在它給我的java.util.InputMismatchException – user3389626

+0

@ user3389626我認爲這應該工作,如果輸出是右 – JohnnyAW

+0

對不起如何我使用inputStream.useLocale(Locale.ENGLISH);我需要導入一些東西嗎? 「找不到符號 symbol:variable Locale」 – user3389626