0

Java で配列を使用して単純なテキスト ファイルから統計情報を表示しようとしています。何をすべきかはわかっていますが、それをどのようにコーディングするかは本当にわかりません。それで、誰でもそれを行う方法のサンプルコードを見せてもらえますか.

テキスト ファイルの名前が gameranking.txt で、次の情報が含まれているとします (これは、例として使用する単純な txt ファイルです)。

Game Event, 1st place, second place, third place, fourth place
World of Warcraft, John, Michael, Bill, Chris
Call of Duty, Michael, Chris, John, Bill
League of Legends, John, Chris, Bill, Michael. 

私の目標は、1 位、2 位の数などの統計を表示することです..次のような表で各個人が獲得しました

Placement     First place, second, third, fourth
John            2            0       1      0
Chris           0            2       0      1
etc...       

私の考え:
まず、gameranking.txt を読み取り、"input" に格納します。次に、while ループを使用して各行を読み取り、各行を「line」という文字列に格納します。その後、配列メソッド「split」を使用して各文字列を取り出し、個々の配列に格納します。その後、各個人が獲得した順位を数えて、printf を使用してきれいな表に表示します。

私の最初の問題は、このデータの配列を作成する方法がわからないことです。最初にファイルを読み、各行と列に含まれる文字列の数を確認してから、それに応じて配列テーブルを作成する必要がありますか? または、読み取り時に各文字列を配列に格納できますか?

私が今持っている疑似コードは次のとおりです。

  • 行数を数えて行に格納する
  • 列がいくつあるかをカウントし、列に格納します
  • 配列を作成する
  • String [] [] gameranking = new String [row] [column]
  • 次に、テキスト ファイルを読み取り、情報を配列に格納します。

使用:

while (input.hasNextLine) {
    String line = input.nextLine();
    while (line.hasNext()) {
        Use line.split to pull out each string
        first string = event and store it into the array
        second string = first place
        third string =......
  • コードのどこかで、配置をカウントする必要があります....

誰かが私がこれを行う方法を教えてもらえますか?

4

2 に答える 2

2

私は完全なプログラムを書くつもりはありませんが、私はそれぞれの質問に取り組み、あなたに簡単な提案をするように努めます:

初期ファイルを読み取ると、各行を取得して、BufferedReaderを使用して文字列に格納できます(または、必要に応じてLineNumberReaderを使用します)。

BufferedReader br = new BufferedReader(new FileReader(file));
String strLine;
while ((strLine = br.readLine()) != null)   {
......Do stuff....
}

その時点で、whileループで文字列を調べます(コンマで区切られているため、これを使用して各セクションを区切ることができます)。サブストリングごとに、a)1番目、2番目、3番目、4番目と比較して配置を取得できます。b)それらのいずれでもない場合は、ゲーム名またはユーザー名のいずれかである可能性があります

これは、位置またはn番目のサブストリングで把握できます(つまり、これが5番目のサブストリングである場合、最初のゲーム名である可能性があります。プレーヤーが4人いるため、次のゲーム名は10番目のサブストリングになります)。「ゲームイベント」はパターンの一部ではないため、無視したことに注意してください。私が見つけたチュートリアルへのリンクを提供することを説明しようとするのではなく、splitを使用してこれまたは他の多くのオプションを実行できます:http: //pages.cs.wisc.edu/~hasti/cs302/examples /Parsing/parseString.html

結果の集計に関しては、基本的に、各プレーヤーのint配列を取得して、1位、2位、3位、賞などを追跡できます。

int[] Bob = new int[4]; //where 0 denotes # of 1st awards, etc.
int[] Jane = new int[4]; //where 0 denotes # of 1st awards, etc.

テーブルの表示は、データを整理し、GUIでJTableを使用することです:http: //docs.oracle.com/javase/tutorial/uiswing/components/table.html

了解しました...これが私が書いたものです。よりクリーンで高速な方法があると確信していますが、これはあなたにアイデアを与えるはずです:

String[] Contestants = {"Bob","Bill","Chris","John","Michael"};

int[][] contPlace=new int[Contestants.length][4];
String file = "test.txt";

public FileParsing() throws Exception {
    Arrays.fill(contPlace[0], 0);
    Arrays.fill(contPlace[1], 0);
    Arrays.fill(contPlace[2], 0);
    Arrays.fill(contPlace[3], 0);
    BufferedReader br = new BufferedReader(new FileReader(file));
    String strLine;
    while((strLine=br.readLine())!=null){
        String[] line = strLine.split(",");
        System.out.println(line[0]+"/"+line[1]+"/"+line[2]+"/"+line[3]+"/"+line[4]);
        if(line[0].equals("Game Event")){
            //line[1]==1st place;
            //line[2]==2nd place;
            //line[3]==3rd place;
        }else{//we know we are on a game line, so we can just pick the names
            for(int i=0;i<line.length;i++){
                for(int j=0;j<Contestants.length;j++){
                    if(line[i].trim().equals(Contestants[j])){
                        System.out.println("j="+j+"i="+i+Contestants[j]);
                        contPlace[j][i-1]++; //i-1 because 1st substring is the game name
                    }

                }
            }
        }
    }
    //Now how to get contestants out of the 2d array
    System.out.println("Placement  First Second Third Fourth");
    System.out.println(Contestants[0]+" "+contPlace[0][0]+" "+contPlace[0][1]+" "+contPlace[0][2]+" "+contPlace[0][3]);
    System.out.println(Contestants[1]+" "+contPlace[1][0]+" "+contPlace[1][1]+" "+contPlace[1][2]+" "+contPlace[1][3]);
    System.out.println(Contestants[2]+" "+contPlace[2][0]+" "+contPlace[2][1]+" "+contPlace[2][2]+" "+contPlace[2][3]);
    System.out.println(Contestants[3]+" "+contPlace[3][0]+" "+contPlace[3][1]+" "+contPlace[3][2]+" "+contPlace[3][3]);
    System.out.println(Contestants[4]+" "+contPlace[4][0]+" "+contPlace[4][1]+" "+contPlace[4][2]+" "+contPlace[4][3]);

}

出場者の配列にデータを入力したり、ゲームを追跡したりする必要がある場合は、適切なコードを挿入する必要があります。また、これらを表示する以外のことをしたい場合は、この2次元配列メソッドを使用するのはおそらく最善ではないことに注意してください。あなたは私のコードを取り、メインを追加し、それが実行されるのを見ることができるはずです。

于 2012-04-12T17:20:08.580 に答える