这是我从一个文件中读取的程序,但是我离开了文件阅读器的讲座,所以我正在为它做准备。 该程序当前读取一行并从中打印出前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个分数。 欢迎冗长的回复。 提前谢谢。
答案 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个最高分。