
解题思路分析:
1.创建Student类,成员变量姓名,性别,成绩并创建有参构造 无参构造 getter/setter方法 和toString方法。把所有学生信息统一放到一个数据集合里,方便后面两套方案共同使用。
2.首先执行第一套方案:执行 "打印学生信息",程序遍历所有学生数据,逐个读取每个学生的姓名、性别、成绩,直接把这些基础信息显示出来,不做任何统计、不计算人数、不做额外处理 ;执行 "计算平均分",程序把所有学生的成绩全部加起来,得到总分,用总分除以学生总人数,得到普通平均分,直接输出结果,不去掉最高分、不去掉最低分
3.执行 "打印学生信息",程序依旧遍历所有学生,但这次不只是显示信息,还会进行统计 ,遍历过程中自动判断性别:男生记一次,女生记一次,最后输出:男生人数、女生人数、全班总人数;执行 "计算平均分",程序依旧遍历所有成绩,累加所有成绩得到总分,找出成绩里的最高分,找出成绩里的最低分,然后用公式计算:(总分 − 最高分 − 最低分) ÷ (总人数 − 2),最后输出去掉高低分后的公平平均分
4.两套方案全部执行完毕,输出两组不同结果,程序运行结束。
代码过程:
package com.sy.interfaceDemo;
public class Student {
private String name; //姓名
private String sex; // 性别
private double score; // 成绩
public Student() {
}
public Student(String name, String sex, double score) {
this.name = name;
this.sex = sex;
this.score = score;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", sex='" + sex + '\'' +
", score=" + score +
'}';
}
}
package com.sy.interfaceDemo;
import java.util.ArrayList;
/**
* 第一套方案
*/
public class StudentOperatorImpl1 implements StudentOperator{
//打印所有学生信息
@Override
public void printAllInfo(ArrayList<Student> students) {
System.out.println("=============全班所有学生基本信息:=============");
//遍历集合
for (int i = 0; i < students.size(); i++) {
Student s = students.get(i);
System.out.println("姓名:" + s.getName() + ", 性别:" + s.getSex() + ", 成绩:" + s.getScore());
}
System.out.println("---------------------------------");
}
//打印全班学生平均分
@Override
public void printAverageScore(ArrayList<Student> students) {
//获取学生的总成绩
double sum = 0.0;
for (int i = 0; i < students.size(); i++) {
Student s = students.get(i);
double score = s.getScore();
sum += score;
}
//计算平均分
System.out.println("班级平均分是:" + sum / students.size());
}
}
package com.sy.interfaceDemo;
import java.util.ArrayList;
/**
* 第二套方案
*/
public class StudentOperatorImpl2 implements StudentOperator{
//打印所有学生信息 分别打印男女的人数
@Override
public void printAllInfo(ArrayList<Student> students) {
System.out.println("=============全班所有学生基本信息:=============");
//定义男女的变量
int manCount = 0;
int womanCount = 0;
//遍历集合
for (int i = 0; i < students.size(); i++) {
Student s = students.get(i);
//判断 需要统计男女个多少人
if("男".equals(s.getSex())){
manCount++;
}else{
womanCount++;
}
}
System.out.println("男生个数:" + manCount + "人");
System.out.println("女生个数:" + womanCount + "人");
System.out.println("总人数:" + (manCount + womanCount) + "人" );
System.out.println("---------------------------------");
}
//打印全班学生平均分
@Override
public void printAverageScore(ArrayList<Student> students) {
//获取学生的总成绩 去掉最高分 和最低分
double sumScore = 0.0;
//默认第一个分为最高分
double max = students.get(0).getScore();
//默认第一个分为最低分
double min = students.get(0).getScore();
for (int i = 0; i < students.size(); i++) {
Student s = students.get(i);
double score = s.getScore();
//判断 获取最高分
if(score > max){
max = score;
}
//判断 获取最低分
if(score < min){
min = score;
}
sumScore += score;
}
//计算平均分
System.out.println("班级平均分是:" + (sumScore - max - min) / (students.size() - 2));
}
}
package com.sy.interfaceDemo;
import java.util.ArrayList;
public interface StudentOperator {
//两个功能
//1.统计数量(所有人)
void printAllInfo(ArrayList<Student> students);
//2.打印平均分(所有人)
void printAverageScore(ArrayList<Student> students);
}
package com.sy.interfaceDemo;
import java.util.ArrayList;
public class StudentTest {
public static void main(String[] args) {
//创建对象
//第一种
//StudentOperator so = new StudentOperatorImpl1();
//第二种
StudentOperator so = new StudentOperatorImpl2();
//创建集合
ArrayList<Student> list = new ArrayList<>();
list.add((new Student("小王" , "男", 90)));
list.add((new Student("小张" , "女", 80)));
list.add((new Student("小李" , "男", 70)));
list.add((new Student("小赵" , "男", 60)));
list.add((new Student("小孙" , "女", 50)));
//集合
so.printAllInfo(list);
//打印平均分
so.printAverageScore(list);
}
}