/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
class GradeBookTest
{
public static void main
( String[] args
) {
int[] gradesArray = { 87, 68, 94, 100, 83, 78, 85, 91, 76, 87 };
GradeBook myGradeBook = new GradeBook("CS101 Introduction to Java Programming", gradesArray );
myGradeBook.displayMessage();
myGradeBook.processGrades();
}
}
class GradeBook
{
private int[] grades;
public GradeBook
( String name,
int[] gradesArray
) {
courseName = name;
grades = gradesArray;
}
public void setCourseName
( String name
) {
courseName = name;
}
{
return courseName;
}
public void displayMessage()
{
System.
out.
printf( "Welcome to the grade book for %s!\n",getCourseName
() ); }
public void processGrades()
{
outputGrades();
System.
out.
printf( "Class average is %.2f\n", getAverage
() ); System.
out.
printf( "Class average is %.2f(遞迴)", getAverage
(grades.
length) ); outputBarChart();
}
public double getAverage()
{
int total = 0; // initialize total
for ( int grade : grades )
total += grade;
return ( double ) total / grades.length;
}
public double getAverage(int n)
{
if(n == 0)
return grades[0];
return (grades[n-1]+getAverage(n-1)*(n-1) ) / n;
}
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.
print("Grade distribution:"); for(int i = 0; i < frequency.length; i++){
if(i == frequency.length-1)
else
System.
out.
print(i
+"0-"+i
+"9:"); for(int j = 0; j < frequency[i]; j++){
}
}
}
public void outputGrades()
{
System.
out.
println( "The grades are:" ); for ( int student = 0; student < grades.length; student++ )
System.
out.
printf( "Student %2d: %3d\n", student
+ 1, grades
[ student
] ); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgoKIGNsYXNzIEdyYWRlQm9va1Rlc3QgCiB7IAoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4oIFN0cmluZ1tdIGFyZ3MgKSAKCXsgCgoJCWludFtdIGdyYWRlc0FycmF5ID0geyA4NywgNjgsIDk0LCAxMDAsIDgzLCA3OCwgODUsIDkxLCA3NiwgODcgfTsgCgkKCQlHcmFkZUJvb2sgbXlHcmFkZUJvb2sgPSBuZXcgR3JhZGVCb29rKCJDUzEwMSBJbnRyb2R1Y3Rpb24gdG8gSmF2YSBQcm9ncmFtbWluZyIsIGdyYWRlc0FycmF5ICk7IAoJCW15R3JhZGVCb29rLmRpc3BsYXlNZXNzYWdlKCk7IAoJCW15R3JhZGVCb29rLnByb2Nlc3NHcmFkZXMoKTsgCgl9IAogfSAKIAogCiBjbGFzcyBHcmFkZUJvb2sgCiB7IAoJcHJpdmF0ZSBTdHJpbmcgY291cnNlTmFtZTsgCglwcml2YXRlIGludFtdIGdyYWRlczsgCgoJcHVibGljIEdyYWRlQm9vayggU3RyaW5nIG5hbWUsIGludFtdIGdyYWRlc0FycmF5ICkgCgl7IAoJCWNvdXJzZU5hbWUgPSBuYW1lOwoJCWdyYWRlcyA9IGdyYWRlc0FycmF5OyAKCX0gCglwdWJsaWMgdm9pZCBzZXRDb3Vyc2VOYW1lKCBTdHJpbmcgbmFtZSApIAoJeyAKCQljb3Vyc2VOYW1lID0gbmFtZTsKCX0gCglwdWJsaWMgU3RyaW5nIGdldENvdXJzZU5hbWUoKSAKCXsgCgkJcmV0dXJuIGNvdXJzZU5hbWU7Cgl9IAoJcHVibGljIHZvaWQgZGlzcGxheU1lc3NhZ2UoKSAKCXsgCgkJU3lzdGVtLm91dC5wcmludGYoICJXZWxjb21lIHRvIHRoZSBncmFkZSBib29rIGZvciAlcyFcbiIsZ2V0Q291cnNlTmFtZSgpICk7IAoJfSAKCXB1YmxpYyB2b2lkIHByb2Nlc3NHcmFkZXMoKSAKCXsgCgkJb3V0cHV0R3JhZGVzKCk7IAoJCVN5c3RlbS5vdXQucHJpbnRmKCAiQ2xhc3MgYXZlcmFnZSBpcyAlLjJmXG4iLCBnZXRBdmVyYWdlKCkgKTsgCgkJU3lzdGVtLm91dC5wcmludGYoICJDbGFzcyBhdmVyYWdlIGlzICUuMmYo6YGe6L+0KSIsIGdldEF2ZXJhZ2UoZ3JhZGVzLmxlbmd0aCkgKTsgCgkJb3V0cHV0QmFyQ2hhcnQoKTsgCgl9IAoJCglwdWJsaWMgZG91YmxlIGdldEF2ZXJhZ2UoKSAKCXsgCgkJaW50IHRvdGFsID0gMDsgLy8gaW5pdGlhbGl6ZSB0b3RhbAoJCWZvciAoIGludCBncmFkZSA6IGdyYWRlcyApIAoJCQl0b3RhbCArPSBncmFkZTsgCgkJcmV0dXJuICggZG91YmxlICkgdG90YWwgLyBncmFkZXMubGVuZ3RoOyAKCX0gCgkKCXB1YmxpYyBkb3VibGUgZ2V0QXZlcmFnZShpbnQgbikKCXsKCQlpZihuID09IDApCgkJCXJldHVybiBncmFkZXNbMF07CgkJcmV0dXJuIChncmFkZXNbbi0xXStnZXRBdmVyYWdlKG4tMSkqKG4tMSkgKSAvIG47Cgl9CglwdWJsaWMgdm9pZCBvdXRwdXRCYXJDaGFydCgpIAoJewoJCWludFtdIGZyZXF1ZW5jeT1uZXcgaW50WzExXTsKCQkKCQlmb3IoaW50IGkgPSAwOyBpIDwgZ3JhZGVzLmxlbmd0aDsgaSsrKXsKCQkJZnJlcXVlbmN5W2dyYWRlc1tpXS8xMF0rKzsgIC8v5L6L5aaCMjXliIYg5q246aGe5YiwZnJlcXVlbmN5WzJdCgkJfQoJCQoJCVN5c3RlbS5vdXQucHJpbnRsbigpOwoJCVN5c3RlbS5vdXQucHJpbnQoIkdyYWRlIGRpc3RyaWJ1dGlvbjoiKTsKCQlmb3IoaW50IGkgPSAwOyBpIDwgZnJlcXVlbmN5Lmxlbmd0aDsgaSsrKXsKCQkJU3lzdGVtLm91dC5wcmludGxuKCk7CgkJCWlmKGkgPT0gZnJlcXVlbmN5Lmxlbmd0aC0xKQoJCQkJU3lzdGVtLm91dC5wcmludCgiMTAwOiIpOwoJCQllbHNlCgkJCQlTeXN0ZW0ub3V0LnByaW50KGkrIjAtIitpKyI5OiIpOwoJCQlmb3IoaW50IGogPSAwOyBqIDwgZnJlcXVlbmN5W2ldOyBqKyspewoJCQkJU3lzdGVtLm91dC5wcmludCgiKiIpOwoJCQl9CgkJfQoKCX0JCgoJcHVibGljIHZvaWQgb3V0cHV0R3JhZGVzKCkgCgl7IAoJCVN5c3RlbS5vdXQucHJpbnRsbiggIlRoZSBncmFkZXMgYXJlOiIgKTsgCgkJZm9yICggaW50IHN0dWRlbnQgPSAwOyBzdHVkZW50IDwgZ3JhZGVzLmxlbmd0aDsgc3R1ZGVudCsrICkgCgkJCVN5c3RlbS5vdXQucHJpbnRmKCAiU3R1ZGVudCAlMmQ6ICUzZFxuIiwgc3R1ZGVudCArIDEsIGdyYWRlc1sgc3R1ZGVudCBdICk7IAoJfSAKIH0g