-1

私は .csv ファイルを持っていて、Java でそれを読み取る方法を理解しています。私の問題は、ファイル内の値を文字列に入れ、文字列を読み取ってこれらの値を計算できるようにしたいことです。

アリス・ジョーンズ,80,90,100,95,75,85,90,100,90,92 ボブ・
マンフレッド,98,89,87,89,9,98,7,89,98,78

これらは値ですが、各名前の横にあるすべての整数を合計して平均を作成するにはどうすればよいでしょうか? 私の最大の問題は、Whileループにあるファイルを読んだときに、コンソールに上に見えるように行を出力できたが、Whileループの外に値を出力したいときに、文字列がそうではないと言ったことでした存在しないので、何もないと値を計算できません。

 import java.io.*;
 import java.util.*;

 public class Grades {
public static void main(String args[]) throws IOException
 {
 try{
 // Open the file that is the first 
 // command line parameter
 FileInputStream fstream = new FileInputStream("filescores.csv");


 BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
 String strLine;
 //Read File Line By Line
 while ((strLine = br.readLine()) != null)   {
 // Print the content on the console
 String line = strLine
 System.out.println (strLine);
 }
 //Close the input stream
 in.close();
 }catch (Exception e){//Catch exception if any
 System.err.println("Error: " + e.getMessage());

 }
 }
 }
4

2 に答える 2

0

Plain Old Java Object (POJO) を実装し、そこにデータを保存することをお勧めします。

public class MyRow {
    public final String name;
    public final int[] values;

    public MyRow(String name, int[] values) {
        this.name=name;
        this.values=values;
    }
}

そして、文字列を分割して単純に入れますList<MyRow>

MyRow splitData(String line) {
    String[] parts=line.split(" ");
    int[] vals=new int[parts.length];
    // starting with one for skipping the name
    for(int i=1; i<parts.length; i++) {
        vals[i-1]=Integer.parse(parts[i]);
    }
    return new MyRow(parts[0], vals);
}

したがって、基本的に読み取りループは次のようになります。

List<MyRow> data = new ArrayList<MyRow>();
while((strLine = br.readLine()) != null) {
    // Print the content on the console
    System.out.println (strLine);
    data.add(splitData(strLine));
}

これで、すべてのデータがdataリストに表示されました。

于 2013-04-24T15:38:18.000 に答える
0

Whileループの外側に値を出力したいとき、文字列が存在しないと言われました

コメントしたように、コードにスコープの問題があります。ただし、while ループ以外で印刷または実行しているものは何も表示されません。次のコード スニペットを使用して、while ループの外側に行を出力できます。

ArrayList<String> lines = new ArrayList<String>();// Updated <String>

 while ((strLine = br.readLine()) != null)   {
   // Print the content on the console
   lines.add(strLine);
   System.out.println(strLine);
 } 

for(int i = 0; i < lines.size(); i++){
 System.out.println(lines.get(i));
}

可変範囲

コメントの編集

注: Grades.java は未チェックまたは安全でない操作を使用します。

注: -X​​lint: unchecked で再コンパイルして詳細を確認してください。

上記は、コレクションの使用が安全でないことを知らせるためにコンパイラによって与えられた単なる警告です。 詳しくはこちらをご覧ください。

于 2013-04-24T15:42:39.267 に答える