1

这是我从文件中读取的程序,但我正在为文件阅读器的讲座而离开,所以我正在准备它。该程序当前读取一行并从中打印出前 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 个分数。欢迎长篇大论。提前致谢。

4

2 回答 2

0

你想在这里排序什么。

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

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

  Mary 45 87 23 76

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

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

于 2012-06-05T05:46:39.417 回答
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 个最高分。

于 2012-06-05T05:55:19.597 回答