package j2.lesson01_2;
public class ExamRecordAction6 {
public static void main(String[] args) {
ExamRecord[] rec = new ExamRecord[4];
rec[0] = createExamRecord("Taro", 50, 90, 100);
rec[1] = createExamRecord("Hanako", 70, 30, 80);
rec[2] = createExamRecord("Kenji", 60, 50, 70);
rec[3] = createExamRecord("Aya", 40, 100, 90);
showExamRecords(rec);
System.out.println("===数学の点数順に並べると===");
ExamRecord[] sortedByMath = sortByMath(rec);
showExamRecords(sortedByMath);
System.out.println("===3科目平均点の順に並べると===");
ExamRecord[] sortedByAverage = sortByAverage(rec);
showExamRecords(sortedByAverage);
System.out.println("===ソート前の順の確認===");
showExamRecords(rec);
}
public static ExamRecord createExamRecord(String name,
int math, int japanese, int english) {
ExamRecord r = new ExamRecord();
r.name = name;
r.math = math;
r.japanese = japanese;
r.english = english;
return r;
}
public static void showExamRecord(ExamRecord r) {
System.out.println(r.name + ", 数学 = " + r.math
+ ", 国語 = " + r.japanese
+ ", 英語 = " + r.english
+ ", 3科目の平均 = "
+ ((r.math + r.japanese + r.english) / 3.0));
}
public static void showExamRecords(ExamRecord[] ra){
for(int i=0; i<ra.length; i++){
showExamRecord(ra[i]);
}
}
public static double averageMath(ExamRecord[] ra){
int sum = 0;
for(int i=0; i<ra.length; i++){
sum += ra[i].math;
}
return (double)sum / ra.length;
}
public static double averageJapanese(ExamRecord[] ra){
int sum = 0;
for(int i=0; i<ra.length; i++){
sum += ra[i].japanese;
}
return (double)sum / ra.length;
}
public static double averageEnglish(ExamRecord[] ra){
int sum = 0;
for(int i=0; i<ra.length; i++){
sum += ra[i].english;
}
return (double)sum / ra.length;
}
public static double getAverage(ExamRecord r){
return (r.math + r.japanese + r.english)/3.0;
}
public static ExamRecord[] sortByMath(ExamRecord[] ra){
// 引数で渡された配列と別の配列を用意する
ExamRecord[] result = new ExamRecord[ra.length];
// raからresultへ1レコードずつコピーして行く
// コピー済みの記録が必要
boolean[] copied = new boolean[ra.length];
for(int i=0; i<copied.length; i++)
copied[i] = false;
for(int i=0; i<result.length; i++){
// 未コピーのデータで最大のものを探す
int maxValue = -1;
int index = -1;
for(int j=0; j<ra.length; j++){
if(!copied[j] && ra[j].math > maxValue){
maxValue = ra[j].math;
index = j;
}
}
// indexは未コピーのデータの中で最大のものを指す
result[i]=ra[index];
copied[index]=true;
}
return result;
}
public static ExamRecord[] sortByAverage(ExamRecord[] ra){
// 引数で渡された配列と別の配列を用意する
ExamRecord[] result = new ExamRecord[ra.length];
// raからresultへ1レコードずつコピーして行く
// コピー済みの記録が必要
boolean[] copied = new boolean[ra.length];
for(int i=0; i<copied.length; i++)
copied[i] = false;
for(int i=0; i<result.length; i++){
// 未コピーのデータで最大のものを探す
double maxValue = -1;
int index = -1;
for(int j=0; j<ra.length; j++){
if(!copied[j] && getAverage(ra[j]) > maxValue){
maxValue = getAverage(ra[j]);
index = j;
}
}
// indexは未コピーのデータの中で最大のものを指す
result[i]=ra[index];
copied[index]=true;
}
return result;
}
}
|