面向对象高级接口的综合案例

解题思路分析:

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);
    }
}
相关推荐
好家伙VCC几秒前
**基于RISC-V架构的嵌入式系统开发:从零开始构建高效低功耗应用**在当前物联网(IoT)和边缘计
java·python·物联网·架构·risc-v
wyu7296111 分钟前
Spring框架学习笔记:从IoC到声明式事务
java
沐知全栈开发15 分钟前
CSS Text(文本)
开发语言
会编程的土豆17 分钟前
【日常做题】 代码随想录(岛屿最大面积+寻宝)
数据结构·算法·图论
前进吧-程序员20 分钟前
现代 C++ 异步编程:从零实现一个高性能 ThreadPool (C++20 深度实践)
开发语言·c++·c++20
qqacj23 分钟前
Spring Security 官网文档学习
java·学习·spring
Rsun0455133 分钟前
10、Java 桥接模式从入门到实战
java·开发语言·桥接模式
金銀銅鐵35 分钟前
[Java] 从 class 文件看 cglib 对 MethodInterceptor 的处理 (下)
java·后端
lee_curry38 分钟前
Java中关于“锁”的那些事
java·线程·并发·juc
jieyucx42 分钟前
Golang 完整安装与 VSCode 开发环境搭建教程
开发语言·vscode·golang