給定一組學生的 Java 成績,計算平均分、最高分與最低分。本文提供修正後的完整代碼,修復原邏輯中的平均值計算錯誤與極值判斷缺陷。
public class Student {
private String name;
private int age;
private int sno;
private int javaScore;
public Student(String name, int age, int sno, int javaScore) {
this.name = name;
this.age = age;
this.sno = sno;
this.javaScore = javaScore;
}
public int getJavaScore() { return javaScore; }
public String getName() { return name; }
@Override
public String toString() {
return "我叫" + name + ",今年" + age + "歲,Java成績:" + javaScore;
}
}
public class ScoreStatistics {
public static void main(String[] args) {
Student[] students = {
new Student("聲張", 2, 4, 34),
new Student("劉禅", 3, 2, 24),
new Student("張燕", 4, 23, 78),
new Student("周少博", 32, 23, 99),
new Student("張旭", 24, 13, 100)
};
// 提取成績陣列
int[] scores = new int[students.length];
for (int i = 0; i < students.length; i++) {
scores[i] = students[i].getJavaScore();
}
// 初始化極值
int max = scores[0];
int min = scores[0];
long sum = 0; // 用 long 避免溢位
for (int score : scores) {
sum += score;
if (score > max) max = score;
if (score < min) min = score;
}
double average = (double) sum / scores.length;
System.out.printf("Java成績統計:平均分=%.2f,最高分=%d,最低分=%d%n",
average, max, min);
}
}
| 原代碼問題 | 修正方案 |
|---|---|
平均值計算 s += w[i]/5 導致整數除法精度丟失 | 先累加總和 sum += score,最後轉 double 除以長度 |
極值判斷邏輯錯亂(比較固定索引 w[0]、w[2]) | 遍歷陣列,動態更新 max、min |
| 硬編碼陣列長度 5 | 使用 students.length 動態獲取 |
Java成績統計:平均分=67.00,最高分=100,最低分=24
IntSummaryStatistics stats = Arrays.stream(scores).summaryStatistics();
double avg = stats.getAverage();
int max = stats.getMax();
int min = stats.getMin();
統計陣列極值與平均值的核心是單次遍歷累加總和、動態更新極值。注意整數除法精度問題,必要時轉為浮點數運算。