###前提・実現したいこと
1)Javaで下図のようなcsvデータ(学校のテストの結果)を読み取る
氏名,英語,国語,数学
山田,80,70,60,
佐藤,70,50,90,
田中,80,50,70
(生徒数は30名)
2)各教科の合計得点を出し、下図のように上位5名だけの氏名と合計点を別のcsvに出力する(合計点で降順)
加藤,300
後藤,290
###発生している問題・エラーメッセージ
csvから入力、合計計算して出力、まではわかるのですが、上位5名のみ降順で出力、というところで詰まっています。
エラーメッセージ
###該当のソースコード
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Collections;
public class JavaApplication23 {
static List<ArrayList<String>> mainList = new ArrayList<ArrayList<String>>();
public static void main(String[] args) { // TODO code application logic here
try {
FileReader fr = new FileReader(new File("csv.csv"));
BufferedReader br = new BufferedReader(fr);
String line;
while ((line = br.readLine()) != null) {
String[] array = line.split(" ");//配列arrayに文字列格納
calArray(array);
write();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private static void write() {
try {
FileWriter fw = new FileWriter(new File("out.csv"));
for (ArrayList<String> array : mainList) {
for (String line : array) {
fw.write(line);
fw.write(",");
}
fw.write("\n"+"\n");
}
fw.close();
}catch (IOException e) {
e.printStackTrace();
}
}
private static void calArray(String[] array) {
List<String> list = new ArrayList<String>();//
for (String line : array) {
list.add(line);//読み込んだ文字列(line)をリストに追加
}
if (array[0].equals("氏名")) {
} else {
int sum = 0;
for (int i = 1; i < array.length; i++) {
sum += Integer.parseInt(array[i]);
}
list.add("" + sum); //
//Collections.sort(list);
System.out.println(list);
}
mainList.add((ArrayList<String>) list);
}
###試したこと
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
回答4件
あなたの回答
tips
プレビュー