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

解题思路分析:

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);
    }
}
相关推荐
圆山猫2 小时前
[Virtualization](四):Linux KVM/RISC-V 的 vCPU 运行路径
java·linux·risc-v
微学AI3 小时前
一根针指向所有方向:挂谷猜想对 LLM Agent 技能-记忆架构的启示
开发语言·人工智能·架构·挂谷猜想
城管不管3 小时前
ReAct、Plan-and-Execute、Reflection 三大智能 Agent 范式核心区别
java·人工智能·算法·spring·ai·动态规划
IT小白杨3 小时前
从环境制备到自动化工作流:多账号运营的工程化架构拆解
java·经验分享·自动化·安全架构·指纹浏览器
豆瓣鸡4 小时前
算法日记 - Day3
java·开发语言·算法
白白白小纯4 小时前
算法篇—反转链表
c语言·数据结构·算法·leetcode
萧瑟余晖4 小时前
Java深入解析篇九之NIO详解
java·网络·nio
韭菜炒鸡肝天4 小时前
VTK开发笔记(一):VTK介绍,Qt..+VSx+VTK.编译
开发语言·笔记·qt
The Chosen One9854 小时前
高进度算法模板速记(待完善)
java·前端·算法
Aaron - Wistron5 小时前
Web API C# (Furion版)带 单元测试
开发语言·后端·c#