使我的程序单独读取3行

时间:2012-06-05 05:23:14

标签: java java-io filereader

这是我从一个文件中读取的程序,但是我离开了文件阅读器的讲座,所以我正在为它做准备。 该程序当前读取一行并从中打印出前3个值,但它只适用于文件中的一行。

import java.util.*;
import java.io.*;
public class ProcessdatdereFile
{
    public static void main (String[] args)throws IOException{
        List namenum=readM("data/raw.txt");
        dataProcess(namenum);
    }

    public static List readM(String filename)throws IOException{
        Scanner fr=new Scanner(new FileReader(filename));
        List<String>namenum=new ArrayList<String>();
        while(fr.hasNext()){
            namenum.add(fr.next());
        }
        fr.close();
        Collections.sort(namenum,Collections.reverseOrder());
        return namenum;
    }

    public static void dataProcess(List namenum)throws IOException{
        for(int i=0;i<4;i++){
            System.out.printf("%s ",namenum.get(i));
        }
        System.out.println("");
    }
}

raw.txt包含

Mary 45 87 23 76
Joe 34 76 12 78 34 87
Anne 90 5 99

程序需要在各行上打印每个名称和前3个分数。 欢迎冗长的回复。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

你想在这里排序什么。

   Collections.sort(namenum,Collections.reverseOrder());

namenum是文件中所有单个项目的列表。

  Mary 45 87 23 76

此列表中的每个项目都是列表中的单独项目。

您需要使用nextLine()。对于每一行,您需要跳过名称的第一个标记,并在整数数组中对其余数据进行转换,并对其进行反向排序。

答案 1 :(得分:0)

public static void main (String[] args)throws IOException{
    String filename = "data/raw.txt";
    Scanner fr=new Scanner(new FileReader(filename));
    //reads the line and passes it to another method where it is put into a list
    String line;
    while(fr.hasNextLine()){
        line=fr.nextLine();
        List namenum=readM(line);
        dataProcess(namenum);
    }
    fr.close();        
}

public static List readM(String line)throws IOException{
    Scanner scn=new Scanner(line);
    List<String>namenum=new ArrayList<String>();
    while(scn.hasNext()){
        namenum.add(scn.next());
    }
    Collections.sort(namenum,Collections.reverseOrder());
    return namenum;
}

我改变了这两种方法,以便将它们作为一行处理,而不是文件中的每个字符串。它现在需要每行,并打印出名称和3个最高分。