2011-03-10 61 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