2011-03-10 60 views
-1

我寫了一個程序,進入一個基本的.txt文件並打印某些東西。它是一個逗號分隔的文件。該文件包含7個姓和名,以及4個數字。七個人中的每一個都在單獨的一行上。文件輸入Java Mac

每一行看起來是這樣的:

喬治·華盛頓,7,15,20,14

程序必須抓住最後的名稱,然後平均的4個數字,而且平均第一,七,第二,等等。我不知道如何開始接近這個,並讓它繼續抓住和打印什麼是必要的。謝謝你的幫助。我很感激。我使用的是Mac做到這一切的節目,它需要所以我使用在Windows上運行:

File Grades = new File(System.getProperty("user.home"), "grades.txt"); 

所以我將如何使用它來從文件中讀取?

+2

您是否已經在同一個問題上開了另外兩個問題? – Cooper 2011-03-10 21:35:49

+0

他們是我有兩個不同的問題。這是一個新問題。 – Mary 2011-03-10 21:40:14

+0

首先,您的問題標題非常相似,以至於很容易認爲問題是相同的;請使用更具描述性的標題。其次,在使用Java時,如果您正確使用Mac,則使用Mac應該沒什麼關係。 – GreenMatt 2011-03-10 21:50:44

回答

-1

不用擔心它在Mac或Windows上運行。 Java爲您處理所有業務。 :)

你可以做下面的事情。這只是一個快速解決方案,所以你可能想要做一些改變。它現在從名爲「input.txt」的文件中讀取。

import java.io.*; 

public class ParseLines { 
    public static void main(String[] args) { 
    try { 
     FileInputStream fs = new FileInputStream("input.txt"); 
     BufferedReader reader = 
     new BufferedReader(new InputStreamReader(new DataInputStream(fs))); 

     String line; 
     double collect[] = {0.0, 0.0, 0.0, 0.0}; 
     int lines = 0; 
     while ((line = reader.readLine()) != null) { 
     String[] parts = line.split(","); 
     if (parts.length == 5) { 
      int avg = 0; 
      boolean skip = false; 
      for (int i = 1; i < 5; i++) { 
      String part = parts[i].trim(); 

      try { 
       int num = Integer.valueOf(part); 
       avg += num; 
       collect[i - 1] += (double) num; 
      } 
      catch (NumberFormatException nexp) { 
       System.err.println("Input '" + part + 
           "' not a number on line: " + line); 
       skip = true; 
       break; 
      } 
      } 

      if (skip) continue; 

      avg /= 4; 
      lines++;      

      System.out.println("Last name: " + parts[0].split(" ")[1] + 
          ", Avg.: " + avg); 
     } 
     else { 
      System.err.println("Ignored line: " + line); 
     } 
     } 

     for (int i = 0; i < 4; i++) { 
     collect[i] /= (double) lines; 
     System.out.println("Average of column " + (i + 1) + ": " + 
          collect[i]); 
     } 

     reader.close(); 
    } catch (Exception e){ 
     System.err.println("Error: " + e.getMessage()); 
    }  
    } 
} 

編輯:改變的代碼,以平均該第一,第二,第三和第四列。

+0

通過給我一些東西從而幫助很多。但是,我怎樣才能讓它取得全部7箇中的第一個得分並取其平均值,從全部7箇中取得第二個並取其平均值,等等。然後將它們輸出到更遠的小數點? – Mary 2011-03-10 22:46:24

+0

沒問題。例如,您可以將信息存儲在數組中,然後隨時更新。當所有行被讀取和處理後,可以計算所有的平均值。 – 2011-03-10 22:49:28

+0

我只是不確定我會怎麼做。我需要爲每一個都有一個數組嗎?我真的很困惑,我只是想弄清楚它的樣子,所以我可以學習它。 – Mary 2011-03-10 22:51:53

2

Java的File類實際上並沒有爲您處理開放或閱讀。你可能想看看FileReaderBufferedReader類。

+0

我剛剛從文件類中進入BufferedReader類,但它說我出於某種原因無法執行readLine()。錯誤說它找不到符號。 – Mary 2011-03-10 22:13:20

+0

@Marry:我需要看一些代碼來弄清楚爲什麼你不能使用readLine()來工作,但是既然你接受了其他的答案,我認爲這引導你到你的代碼工作的地方。 – GreenMatt 2011-03-10 23:00:59

+0

我想通了。我在readLine()之前混淆了一些東西,但是我明白了。 – Mary 2011-03-10 23:59:27