0

配列を使用して、ファイルからデータを読み取る方法を見つけようとしています。ファイル内のデータは次のようにリストされます。

Clarkson 80000
Seacrest 100000
Dunkleman 75000
...

配列を使用してその情報を保存したい。現在、データを読み取って使用するために次のようなものがあります。

            String name1 = in1.next();
            int vote1 = in1.nextInt();


            //System.out.println(name1 +" " + vote1);

            String name2 = in1.next();
            int vote2 = in1.nextInt();

            //System.out.println(name2 +" " + vote2);

            String name3 = in1.next();
            int vote3 = in1.nextInt();
              ...
              //for all names

問題は、私がやっている方法では、より多くの競技者のファイル データを操作できないことです。私はこの方法を使用して、さまざまな方法ですべての計算を処理し、期待される出力を得ることができますが、それは本当に非効率的だと思います。

予想される出力:

American Idol Fake Results for 2099
Idol Name        Votes Received    % of Total Votes
__________________________________________________      
Clarkson            80,000            14.4%
Seacrest            100,000           18.0%
Dunkleman           75,000            13.5%
Cowell              110,000           19.7%
Abdul               125,000           22.4%
Jackson             67,000            12.0%

Total Votes         557,000

The winner is Abdul!

入力ファイルのデータを配列に読み込むのは簡単java.io.BufferedReaderだと思いますが、それを使用しない方法はありますか? 私はこれを見ました:Java:テキストファイルを読む方法ですが、これは別の実装だと思っています。

理解可能な配列と、少なくとも 2 ~ 3 個のメソッド (実行時にすべてのデータを読み取って保存するメイン メソッドに加えて) を使用して、すべての情報を処理したいと考えています。しかし、そのデータを使用してパーセンテージなど (出力など) を見つけたいとします。勝者を見つけてください...結果をアルファベット順に並べることもできます!

何かを試して、コードがどのように機能するかを学び、コンセプトの感触をつかみたいと思っています。;c

4

2 に答える 2

1

いくつかのオプションがあります:

  1. ファイルデータを表すクラスを作成し、それらのオブジェクトの配列を作成します

  2. 名前の 1 つと投票の 2 つの配列を並行して維持する

  3. Map人の名前がキーで、投票数がである a を使用します

    a)配列のように直接アクセスできます

    b) クラスを作成する必要はありません

オプション1:

public class Idol 
{
   private String name;
   private int    votes; 

   public Idol(String name, int votes) 
   {
       // ...
   }

}

int index = 0;
Idol[] idols = new Idol[SIZE];

// read from file
String name1 = in1.next();
int vote1 = in1.nextInt();

//create Idol
Idol i = new Idol(name1, vote1);

// insert into array, increment index
idols[index++] = i;

オプション 2:

int index = 0;
String[] names = new String[SIZE];
int[] votes    = new int[SIZE];

// read from file
String name1 = in1.next();
int vote1 = in1.nextInt();


// insert into arrays
names[index] = name1;
votes[index++] = vote1;

オプション 3:

// create Map
Map<String, Integer> idolMap = new HashMap<>();

// read from file
String name1 = in1.next();
int vote1 = in1.nextInt();

// insert into Map
idolMap.put(name1, vote1);

これで、心ゆくまでデータを操作して元に戻すことができます。

于 2013-04-25T22:51:17.883 に答える