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

解题思路分析:

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);
    }
}
相关推荐
Moshow郑锴2 小时前
sql-pipeline - 基于PostgreSQL的SQL健康检查与发布编排平台
java·sql
weixin_307779135 小时前
C++代码实现MATLAB中的dlarray函数功能
开发语言·c++·算法·matlab
一水鉴天8 小时前
映射、哈希表与哈斯图:计算机科学的三种基线 20261003(元宝)
开发语言·人工智能
Frank_refuel8 小时前
C++11之一场名为“搬家”的 C++ 之旅
开发语言·c++
Wang's Blog9 小时前
Java 项目实战: 外卖平台优化-Nginx配置文件结构与块层级
java·开发语言·nginx
2601_962071579 小时前
类变量和全局变量的查找路径有什么区别?
开发语言·python
\光辉岁月/10 小时前
5.java-数组
java·开发语言
Java后端的Ai之路10 小时前
Python进阶探索29_eval内置函数
开发语言·python·探索·eval·内置函数
谢亮_vipxieliang11 小时前
Spring 事务失效的常见场景
java·开发语言·数据库·spring boot
时间的拾荒人11 小时前
Qt 多线程详解:从 QThread 到实战
开发语言·qt·面试