お世話になります。
CSV 形式のファイルを読み込み、次の計算を行った結果を別のファイルに書き出すjavaのプログラムを作成しています。
読み込むファイルのデータ
test.csv
受験者名,計算方法,数学の点数,国語の点数,英語の点数,物理の点数,生物の点数 例 山田太郎,A,85,73,90,68,75 田中花子,H,95,75,88,90,79 佐藤次郎,B,88,90,38,,50, 斎藤三郎,M,55,84,,95,85
次の計算をして別のファイルに書き出します。
A :平均点: 5つの点数の平均を求める。
B :最高点: 1番高い点数を求める。
H :中間点1 1番高い点数と 1番低い点数の平均を求める。
M :中間点2: 点数を降順に並べたときの中心の点数を求める。
(M:中間点2について、点数が偶数個の場合では値が大きい方を出力する。)
書き出したファイル
Result.txt
受験者名,計算結果,計算方法 例 山田太郎,78.2,平均点 田中花子,85,中間点1 佐藤次郎,90,最高 斎藤三郎,84,中間点2
・受験者は最低3科目以上の点数を持っている。点数はところどころ抜けていることもある。
・行ごとの列数が不正である場合、出力時、その行には計算結果ではなく、不正なデータであることをファイルに出力する。
→名前の未入力、計算方法の不正、列数の不正、点数に数字以外の文字が記述されている不正等は以下の通り出力する。
--- 名前の未入力:「名前を入力してください。」
--- 不正な計算方法指定: 「計算方法は[A,B,H,M]のいずれかを入力してください。」
--- 列数の不足:「列数が不足しています。受験者名、計算方法は必ず入力し、未受験の科目がある場合は空欄。」
--- 列数オーバー: 「列数が多すぎます。 受験者名、計算方法、5科目の点数、計7項目まで入力できます。」
--- 不正な点数:「それぞれの点数は空欄、または0~100までの整数を入力してください。」
・読み込みファイルが見つからない、コマンド入力ミス等で正しくファイルが読み込めない場合、例外処理をおこない、処理を終了させること。また、エラー内容がわかるように標準出力させること。
・指定したファイルが見つからない場合:「指定されたファイルが見つかりません。」
・取得するファイルが指定されていない場合: 「ファイルを指定してください。」
・このファイルへ出力順は、読み込みファイルの順番と同じとする。
・ファイル出力の場所は、入力ファイルと同じ場所とする。
現在、以下の通りにコードを組みましたが、次からどのようにすればわかりません。
java
1import java.io.BufferedReader; 2import java.io.BufferedWriter; 3import java.io.File; 4import java.io.FileNotFoundException; 5import java.io.FileReader; 6import java.io.FileWriter; 7import java.io.IOException; 8 9 public class Main { 10 public static void main(String[] args) { 11 String line; 12 String[] csvArray = null; 13 File inputFile = new File("C:\syoutest.cvs"); 14 File outputFile = new File("C:\Result.txt"); 15 BufferedReader in = null; 16 BufferedWriter out = null; 17 18 try { 19 in = new BufferedReader(new FileReader(inputFile)); 20 out = new BufferedWriter(new FileWriter(outputFile)); 21 csvArray = line.split("\,"); 22 csvArray = line.split("\,"); 23 24 25 26 27 28 // データを出力する 29 for (int i = 0; i < csvArray.length; i++) { 30 // 行の最後のデータはカンマ付けない 31 if (i != csvArray.length - 1) { 32 out.write(csvArray[i]); 33 out.write(","); 34 } else { 35 out.write(csvArray[i]); 36 } 37 } 38 // 改行する 39 out.newLine(); 40 } 41 } catch (FileNotFoundException e) { 42 e.printStackTrace(); 43 } catch (IOException e) { 44 e.printStackTrace(); 45 } finally { 46 try { 47 if (in != null) { 48 in.close(); 49 } 50 if (out != null) { 51 out.close(); 52 } 53 } catch (IOException e) { 54 e.printStackTrace(); 55 } 56 } 57 } 58}
各計算処理を行うメソッドを持ったクラスを作る。→その結果をを変数に収納
java
1public class Person { 2 public static double main(int[]) { 3 double sum = 0; 4 double[] data = {}; 5 for( int i=0; i < data.length; i++ ) { 6 sum += data[i]; 7 } 8 double ave = sum / data.length; 9 } 10 11 public static void max_data(int[] data){ 12 int max=data[0]; 13 for(int i = 1;i < 5;i++){ 14 if(max<data[i]){ 15 max = data[i]; 16 } 17 } 18 } 19 static void min_data(int[] data){ 20 21 int min = data[0]; 22 for(int i = 1;i < 5;i++){ 23 if(min > data[i]){ 24 min=data[i]; 25 } 26 } 27 } 28}
上記のように平均値と最大値、最小値を求めるクラスのコードを書いていけばよいのでしょうか。
プログラムを初めて2週間で何から手を付ければよいのかもわからない状態です。
ヒントなどだけでもいただければ幸いです
あなたの回答
tips
プレビュー