class InGroup extends Class
String groupName; String activityTime; String place;
public String getGroupName() { return groupName; } // 使用setter,getter public void setGroupName(String groupName) { this.groupName = groupName; }
String getAverage() { sum[j] = sum[j] - maxScore - minScore; return sum[j] / (s.length - 2); }
class Student { String name; Grade[] grade; Student(String name, Grade[] grade) { this.name = name; this.grade = grade; } } //课程拓展到多门课程。 class Grade { int courseNo; String courseName; double courseScore; Grade(int courseNo, String courseName, double courseScore) { this.courseNo = courseNo; this.courseName = courseName; this.courseScore = courseScore; } }
class Student { String name; Grade[] grade; Student(String name, Grade[] grade) { this.name = name; this.grade = grade; } } //课程拓展到多门课程。 class Grade { int courseNo; String courseName; double courseScore; Grade(int courseNo, String courseName, double courseScore) { this.courseNo = courseNo; this.courseName = courseName; this.courseScore = courseScore; } } class Class { Student[] s; Class(Student[] s) { this.s = s; } String getAverage() { double[] sum = {0, 0}; for (int j = 0; j < 2; j++) { for (int i = 0; i < s.length; i++) { sum[j] += s[i].grade[j].courseScore; } } return "课程号:" + s[0].grade[0].courseNo + " 课程名:" + s[0].grade[0].courseName + "的平均成绩为:" + sum[0] / s.length + "\n\t课程号:" + s[0].grade[1].courseNo + " 课程名:" + s[0].grade[1].courseName + "的平均成绩为:" + sum[1] / s.length; } String getMax() { double[] maxScore = {0, 0}; for (int j = 0; j < 2; j++) { for (int i = 0; i < s.length; i++) { if (s[i].grade[0].courseScore > maxScore[j]) { maxScore[j] = s[i].grade[j].courseScore; } } } return "课程号:" + s[0].grade[0].courseNo + " 课程名:" + s[0].grade[0].courseName + "的最高分:" + maxScore[0] + "\n\t课程号:" + s[0].grade[1].courseNo + " 课程名:" + s[0].grade[1].courseName + "的最高分:" + maxScore[1]; } public String getMin() { double[] minScore = {100, 100}; for (int j = 0; j < 2; j++) { for (int i = 0; i < s.length; i++) { if (s[i].grade[1].courseScore < minScore[0]) { minScore[0] = s[i].grade[j].courseScore; } } } return "课程号:" + s[0].grade[0].courseNo + " 课程名:" + s[0].grade[0].courseName + "的最高分:" + minScore[0] + "\n\t课程号:" + s[0].grade[1].courseNo + " 课程名:" + s[0].grade[1].courseName + "的最高分:" + minScore[1]; } String gradeDistribution() { int[] excellence = {0, 0}; int[] good = {0, 0}; int[] pass = {0, 0}; int[] failure = {0, 0}; for (int j = 0; j < 2; j++) { for (int i = 0; i < s.length; i++) { int grade = (int) (s[i].grade[j].courseScore / 10); switch (grade) { case 10: case 9: excellence[j]++; break; case 8: case 7: good[j]++; break; case 6: pass[j]++; break; default: failure[j]++; break; } } } return "课程号:" + s[0].grade[0].courseNo + " 课程名:" + s[0].grade[0].courseName + "分数分布——优秀:" + excellence[0] + " 良好:" + good[0] + " 及格:" + pass[0] + " 不及格:" + failure[0] + "\n\t课程号:" + s[0].grade[1].courseNo + " 课程名:" + s[0].grade[1].courseName + "分数分布——优秀:" + excellence[1] + " 良好:" + good[1] + " 及格:" + pass[1] + " 不及格:" + failure[1]; } } class InGroup extends Class { String groupName; String activityTime; String place; InGroup(Student[] s) { super(s); } public String getGroupName() { return groupName; } public void setGroupName(String groupName) { this.groupName = groupName; } public String getActivityTime() { return activityTime; } public void setActivityTime(String activityTime) { this.activityTime = activityTime; } public String getPlace() { return place; } public void setPlace(String place) { this.place = place; } // 重写平均成绩方法(去掉一个最高,去掉一个最低,取平均)。 @Override String getAverage() { double[] sum = {0, 0}; for (int j = 0; j < 2; j++) { for (int i = 0; i < s.length; i++) { sum[j] += s[i].grade[j].courseScore; } double maxScore = 0; for (int i = 0; i < s.length; i++) { if (s[i].grade[0].courseScore > maxScore) { maxScore = s[i].grade[j].courseScore; } } double minScore = 100; for (int i = 0; i < s.length; i++) { if (s[i].grade[0].courseScore > minScore) { minScore = s[i].grade[j].courseScore; } } sum[j] = sum[j] - maxScore - minScore; } return "课程号:" + s[0].grade[0].courseNo + " 课程名:" + s[0].grade[0].courseName + "的平均成绩为:" + sum[0] / (s.length - 2) + "\n\t课程号:" + s[0].grade[1].courseNo + " 课程名:" + s[0].grade[1].courseName + "的平均成绩为:" + sum[1] / (s.length - 2); } String memberlist() { StringBuilder namelist = new StringBuilder(" 小组成员:"); for (Student i : s) { namelist.append(i.name + ' '); } String menmberList = namelist.toString(); return menmberList; } String showDetails() { return "组名:" + groupName + memberlist() + "\n\t活动时间:" + activityTime + " 活动地点:" + place; } String showGrade() { return "小组平均成绩:" + getAverage() + "\n最高分:" + getMax() + "\n最低分:" + getMin() + "\n分数分布统计:" + gradeDistribution(); } } public class E2T1 { public static void main(String[] args) { int stuNum = 4; String[] name = {"wei", "zhao", "wang", "zhang"}; int courseNum = 2; int[] courseNo = {1, 2}; String courseName[] = {"Chinese", "Math"}; double[][] courseScore = {{100, 90}, {81, 79}, {69, 86}, {81, 72}}; Student[] stu = new Student[stuNum]; for (int i = 0; i < stuNum; i++) { Grade grade[] = new Grade[courseNum]; for (int j = 0; j < courseNum; j++) { grade[j] = new Grade(courseNo[j], courseName[j], courseScore[i][j]); } stu[i] = new Student(name[i], grade); } InGroup g = new InGroup(stu); g.setGroupName("第一组"); g.setActivityTime("周五"); g.setPlace("图书馆"); System.out.println("小组详情:\n" + g.showDetails()); System.out.println("\n小组成绩:\n" + g.showGrade()); } }
小组详情: 组名:第一组 小组成员:wei zhao wang zhang 活动时间:周五 活动地点:图书馆 小组成绩: 小组平均成绩:课程号:1 课程名:Chinese的平均成绩为:65.5 课程号:2 课程名:Math的平均成绩为:68.5 最高分:课程号:1 课程名:Chinese的最高分:100.0 课程号:2 课程名:Math的最高分:90.0 最低分:课程号:1 课程名:Chinese的最高分:72.0 课程号:2 课程名:Math的最高分:100.0 分数分布统计:课程号:1 课程名:Chinese分数分布——优秀:1 良好:2 及格:1 不及格:0 课程号:2 课程名:Math分数分布——优秀:1 良好:3 及格:0 不及格:0
class Circle { double r; Circle(double r) { this.r = r; } double getArea() { return Math.PI * r * r; } } public class E2T2 { public static void main(String[] args) { Circle c = new Circle(1.0); System.out.println(c); } }
提示:所有的Java类都继承于java.lang.Object。
通过反编译工具反编译E2T2.class,Cricle.class。得到如下代码
class Circle { double r; Circle(double paramDouble) { this.r = paramDouble; } double getArea() { return Math.PI * this.r * this.r; } } public class E2T2 { public static void main(String[] paramArrayOfString) { Circle circle = new Circle(1.0D); System.out.println(circle); } }
使用了String[] paramArrayOfString做默认参数,而传入数据则是double 1.0,顾需要使用toString转格式
查阅java.lang.Object源代码,发现其中的toString()方法
public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }
程序应该是调用父类的toString()完成的输出
已经知道程序的输出所调用的方法后,我们可以重写toString()方法完成输出,再使用String.format()保留小数
class Circle { double r; Circle(double r) { this.r = r; } String getArea() { return String.format("%.2f", Math.PI * r * r); } @Override //重写的方法 public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()) +"\n圆的面积为:"+ getArea(); } } public class E2T2 { public static void main(String[] args) { Circle c = new Circle(1.0); System.out.println(c); } }
程序输出结果为:
Circle@1b6d3586 圆的面积为:3.14