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

解题思路分析:

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);
    }
}
相关推荐
瑞码空间18 分钟前
面向接口编程与开闭原则在模拟 JDBC 驱动中的应用
java·jdbc
Félix25135 分钟前
Nacos学习笔记(SpringBoot/SpringCloud)
java·spring boot·spring
文丑颜不良啊40 分钟前
LeetCode1581~1600题目解析
java·leetcode
香蕉大香蕉(06敬畏市场)40 分钟前
MySQL 单点详解(06)
java·数据库·mysql·博客·实习
椒颜皮皮虾྅42 分钟前
让文档不止于文字:DeploySharp + PP-Structure,打通版面分析与表格重建
开发语言·学习·c#·.net·cuda
Eider19981 小时前
Python基础知识之并发相关-2
开发语言·前端·python
lqbzlll1 小时前
Spring Boot 开启虚拟线程后接口反而变慢了?4 个排查方向和对应修法
java·spring boot·后端
第九序言T1 小时前
Python 数据处理进阶(二十二)用 Pandas 做一次完整的用户行为分析
开发语言·python·数据分析·pandas
云和数据.ChenGuang1 小时前
再论深拷贝和浅拷贝
开发语言·人工智能·python·1024程序员节
七夜zippoe1 小时前
LangChain4j vs Spring AI:Java AI 框架怎么选(对比表)
java·人工智能·spring·ai·langchain4j