三、參考 GradeBook.java, GradeBookTest.java 檔案,試撰寫“GradeBook”class 內編號
39 行的成績分布列印功能
public void outputBarChart()
{
int[] frequency=new int[11];
…
}
其中 frequency 變數的宣告不得改變,且不得使用任何 Java 類別程式庫。假如
取消編號 29 行”outputBarChart()”的註解(亦即 processGrades()最後一行會呼叫
outputBarChart()),再次執行 GradeBookTest,則 outputBarChart()必須印出如下結果。
(20 分)
Grade distribution:
00-09:
10-19:
20-29:
30-39:
40-49:
50-59:
60-69: *
70-79: **
80-89: ****
90-99: **
100: *
詳解 (共 2 筆)
詳解
public void outputBarChart()
{
int[] frequency=new int[11];
for(int i = 0; i < grades.length; i++){
frequency[grades[i]/10]++;
//例如25分 歸類到frequency[2]
}
System.out.println("Grade distribution:");
for(int i = 0; i < frequency.length; i++){
System.out.println();
if(i == frequency.length-1)
System.out.print("100:");
else
System.out.print(i+"0-"+i+"9:");
for(int j = 0; j < frequency[i]; j++){
System.out.print("*");
}
}
}
執行結果
詳解
為了完成 outputBarChart 方法的實作,我們需要依照成績分布來計算每個成績段的頻率,然後根據這些頻率來繪製條形圖。下面是 outputBarChart 方法的完整實作,這段代碼將遍歷 grades 數組,統計每個成績段的學生數量,並根據每個成績段的學生數量來繪製相對應的星號 (*):
public void outputBarChart() {
int[] frequency = new int[11];
// 對每個成績進行分組計數
for (int grade : grades) {
++frequency[grade / 10];
}
for (int grade : grades) {
++frequency[grade / 10];
}
System.out.println("Grade distribution:");
// 對每個成績段繪製條形圖
for (int count = 0; count < frequency.length; count++) {
// 輸出成績段範圍
if (count == 10) {
System.out.printf("%5d: ", 100);
} else {
System.out.printf("%02d-%02d: ", count * 10, count * 10 + 9);
}
for (int count = 0; count < frequency.length; count++) {
// 輸出成績段範圍
if (count == 10) {
System.out.printf("%5d: ", 100);
} else {
System.out.printf("%02d-%02d: ", count * 10, count * 10 + 9);
}
// 繪製對應頻率的星號 (*)
for (int stars = 0; stars < frequency[count]; stars++) {
System.out.print("*");
}
for (int stars = 0; stars < frequency[count]; stars++) {
System.out.print("*");
}
System.out.println(); // 開始新的一行
}
}
這段代碼首先初始化一個長度為11的 frequency 數組來存儲每個成績段(0-9, 10-19, ..., 100)的學生數量。然後,通過遍歷 grades 數組來計數每個成績屬於哪個成績段,並相應地增加該成績段在 frequency 數組中的計數。最後,使用兩個嵌套的for循環來輸出每個成績段及其對應的星號 (*) 來繪製條形圖。
}
}
這段代碼首先初始化一個長度為11的 frequency 數組來存儲每個成績段(0-9, 10-19, ..., 100)的學生數量。然後,通過遍歷 grades 數組來計數每個成績屬於哪個成績段,並相應地增加該成績段在 frequency 數組中的計數。最後,使用兩個嵌套的for循環來輸出每個成績段及其對應的星號 (*) 來繪製條形圖。
若將這段代碼添加到 GradeBook 類中並取消 processGrades 方法中對 outputBarChart 方法的註解,再次執行 GradeBookTest 時,除了之前的輸出外,還會看到一個基於提供的成績數據所繪製的成績分布條形圖,如題目所示的輸出結果。