1

これはファイルから読み取る私のプログラムですが、ファイルリーダー向けの講義のために不在だったので、翼を広げています。このプログラムは現在、1 行で読み取り、そこから上位 3 つの値を出力しますが、ファイル内の 1 行でしか機能しません。

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;
}

ファイル内の各文字列ではなく、それぞれを行として処理するように、これら 2 つのメソッドを変更しました。これで、各 Line が取得され、名前と 3 つの上位スコアと共に出力されます。

于 2012-06-05T05:55:19.597 に答える