2021-05-09

package dao;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

/**
 * 整体思路:
 * 1、创建一个学生类,定义学生的成绩属性,定义各种对学生成绩进行操作的方法
 * 2、学生为若干个,那么成绩也不只一个,那么即可用集合来存储每一个成绩
 * 3、有参构造方法,用来修改学生成绩集合中的数据
 * 4、创建总分、平均分、及格人数、升序、降序等方法
 * 5、编写每个方法中的逻辑代码,总分方法只需将获取的成绩通过数学计算方式计算即可
 * 6、平均分方法,不仅需要总分成绩,还需要一个参数为学生人数,所以调用该方法时需传递人数参数
 * 7、及格人数方法,这时涉及到判断,if语句来判断,但是学生成绩是一个集合,所以每次遍历都做一次if判断,
 * 因此将if写入for循环中,判断每次成绩是否大于60分,大于则及格,反之亦然,并且需要用一个初始参数来
 * 接收及格人数,所以该参数需要在每次比较完后,进行自身加一操作
 * 8、升序和降序方法,因为成绩保存在集合中,所以只需要调用Collections集合工具类中的sort、reverse
 * 两个方法进行对集合升序、降序操作,再遍历改变后的集合
 * 9、执行类中,因为学生人数未确定,所以需要用户自行从控制台输入学生个数和每个学生成绩,并且将输入的
 * 成绩保存在一个集合中,此过程中为了防止程序出现异常,需要判断控制台输入的值是否是整数类型,调用Scanner
 * 类中的hasNextInt方法即可
 */

//创建学生类
public class Student
{
    //定义课程成绩变量,因为学生很多,用List集合定义
    private List<Integer> performance;

    //有参构造方法,来设置课程成绩
    public Student(List<Integer> performance)
    {
        this.performance = performance;
    }

    //获取成绩
    public List<Integer> getPerformance()
    {
        return performance;
    }

    //计算学生成绩总分
    public int countAll()
    {
        //定义变量,用来接收计算后的总分
        int sum = 0;

        //使用foreach循环遍历获取到的课程成绩变量
        for (Integer i:performance)
        {
            //因为课程成绩变量为Integer类型,计算时需要转换为int类型
            int num = (int)i;
            //计算总分
            sum = sum + num;
        }
        //返回得到的总分
        return sum;
    }

    //计算学生成绩平均分,因为计算平均分需要总分和学生人数,stuNum参数及为需要传递进来的学生人数
    public double averAll(int stuNum)
    {
        //定义变量接收计算得到的平均分
        int averNum = 0;
        //定义变量接收计算得到的总分
        int sum = 0;
        //遍历获取的成绩集合
        for (Integer i:performance)
        {
            int num = (int)i;
            sum += num;
            //平均分为总分除以人数
            averNum = sum/stuNum;
        }
        return averNum;
    }

    //查看及格人数
    public int passPeople()
    {
        //定义变量接收及格人数
        int passPeopleNum = 0;
        //遍历集合
        for (Integer i:performance)
        {
            //判断,如果成绩大于60则为及格
            if (i>=60)
            {
                //当上述条件满足,则人数加一,一直到循环结束,最终结果为及格人数
                passPeopleNum++;
            }
        }
        return passPeopleNum;
    }

    //将成绩分数升序排列
    public void compareAsc()
    {
        //Collections是集合的工具类,调用工具类的sort方法可以将List集合数据进行升序排列
        Collections.sort(performance);
        System.out.print("学生成绩由低到高为:");
        //遍历排完序后的集合
        for (Integer i:performance)
        {
            //输出结果
            System.out.print(" "+i+" ");
        }
        System.out.println();
    }

    //将成绩分数降序排列
    public void compareDesc()
    {
        //工具类中reverse方法可以将List按照降序排列
        Collections.reverse(performance);
        System.out.print("学生成绩由高到低为:");
        //遍历降序后的集合
        for (Integer i:performance)
        {
            System.out.print(" "+i+" ");
        }
    }

    //执行程序
    public static void main(String[] args)
    {
        //创建List集合,将每个学生的成绩存在集合中
        List<Integer> stuPerformance = new ArrayList<Integer>();

        //定义变量接收输入的学生个数
        int stuCount = 0;

        //定义变量,用来将控制台输入的学生数,及stuCount的值赋值给该变量,传到学生类的方法中计算平均数
        //不直接传stuCount的原因是因为,在下面for循环中,stuCount的值会发生变化
        int stuNum = 0;

        //Scanner类可以从控制台输入学生个数,因为不知道多少和学生,就自行输入
        Scanner scanner = new Scanner(System.in);

        //do...while循环用来判断控制台输入的是否是一个正整数
        do {
            System.out.println("请输入学生个数:");
            //hasNextInt()方法返回boolean类型,用于判断控制台输入的值是否为int类型
            if (scanner.hasNextInt())
            {
                //如果是,则接收控制台输入的数据
                stuCount = scanner.nextInt();
                //判断输入的整数是否大于0
                if(stuCount<0)
                {
                    //不是,则提醒用户
                    System.out.println("学生人数必须大于或等于0,请重新输入:");
                    continue;
                }
                //赋值
                stuNum = stuCount;
                break;
            }else
            {
                //如果不是,则提醒用户
                System.out.println("输入的数据必须为正整数,请重新输入:");
                //接收错误数据类型但不做任何处理,防止死循环
                scanner.next();
            }
        }while (true);

        //学生人数不固定,因此需要用户输入每一个学生的成绩
        //for循环用来输入每一个学生成绩,其中参数为学生个数,有多少个学生就循环多少次
        for (;stuCount>0;stuCount--)
        {
            System.out.println("请输入学生成绩:");
            //判断输入的是否是int类型数据
            if (scanner.hasNextInt())
            {
                //是,则接收
                int performance = scanner.nextInt();
                //判断输入的整数是否大于0
                if (performance<0)
                {
                    //不是,则提醒用户
                    System.out.println("学生成绩必须大于或等于0,请重新输入:");
                    //循环次数加一,刷新循环
                    stuCount++;
                    continue;
                }
                //将接收的数据保存在集合中
                stuPerformance.add(performance);
            }else
            {
                //不是,则重新输入
                System.out.println("输入数据必须为正整数,请重新输入:");
                //因为不满组条件会浪费一次循环次数,所以重新每次加一,刷新循环次数
                stuCount++;
                //接收错误类型数据不做任何处理,防止死循环
                scanner.next();
            }
        }

        //创建学生对象,并传入学生成绩的集合,这时,学生类中的performance变量的值即为传入的值
        Student student = new Student(stuPerformance);
        //输出总分结果
        System.out.println("学生总成绩为:"+student.countAll());
        //输出平均分结果
        System.out.println("学生平均成绩为:"+student.averAll(stuNum));
        //输出及格人数
        System.out.println("及格人数为:"+student.passPeople());
        //输出由低到高排列的成绩
        student.compareAsc();
        //输出由高到低排列的成绩
        student.compareDesc();
    }
}

运行结果:

"C:\Program Files\Java\jdk-12.0.1\bin\java.exe" "-javaagent:D:\IDEA\IntelliJ IDEA 2018.3.6\lib\idea_rt.jar=65375:D:\IDEA\IntelliJ IDEA 2018.3.6\bin" -Dfile.encoding=UTF-8 -classpath E:\C&B\target\classes;E:\MyWeb\RepMaven\org\springframework\spring-core\5.0.2.RELEASE\spring-core-5.0.2.RELEASE.jar;E:\MyWeb\RepMaven\org\springframework\spring-jcl\5.0.2.RELEASE\spring-jcl-5.0.2.RELEASE.jar;E:\MyWeb\RepMaven\org\springframework\spring-context\5.0.2.RELEASE\spring-context-5.0.2.RELEASE.jar;E:\MyWeb\RepMaven\org\springframework\spring-aop\5.0.2.RELEASE\spring-aop-5.0.2.RELEASE.jar;E:\MyWeb\RepMaven\org\springframework\spring-beans\5.0.2.RELEASE\spring-beans-5.0.2.RELEASE.jar;E:\MyWeb\RepMaven\org\springframework\spring-expression\5.0.2.RELEASE\spring-expression-5.0.2.RELEASE.jar;E:\MyWeb\RepMaven\org\mybatis\mybatis\3.4.5\mybatis-3.4.5.jar;E:\MyWeb\RepMaven\mysql\mysql-connector-java\8.0.16\mysql-connector-java-8.0.16.jar;E:\MyWeb\RepMaven\com\google\protobuf\protobuf-java\3.6.1\protobuf-java-3.6.1.jar;E:\MyWeb\RepMaven\org\apache\struts\struts2-core\2.3.8\struts2-core-2.3.8.jar;E:\MyWeb\RepMaven\org\apache\struts\xwork\xwork-core\2.3.8\xwork-core-2.3.8.jar;E:\MyWeb\RepMaven\org\apache\commons\commons-lang3\3.1\commons-lang3-3.1.jar;E:\MyWeb\RepMaven\asm\asm\3.3\asm-3.3.jar;E:\MyWeb\RepMaven\asm\asm-commons\3.3\asm-commons-3.3.jar;E:\MyWeb\RepMaven\asm\asm-tree\3.3\asm-tree-3.3.jar;E:\MyWeb\RepMaven\org\freemarker\freemarker\2.3.19\freemarker-2.3.19.jar;E:\MyWeb\RepMaven\ognl\ognl\3.0.6\ognl-3.0.6.jar;E:\MyWeb\RepMaven\javassist\javassist\3.11.0.GA\javassist-3.11.0.GA.jar;E:\MyWeb\RepMaven\commons-fileupload\commons-fileupload\1.2.2\commons-fileupload-1.2.2.jar;E:\MyWeb\RepMaven\commons-io\commons-io\2.0.1\commons-io-2.0.1.jar dao.Student
请输入学生个数:
-1
学生人数必须大于或等于0,请重新输入:
请输入学生个数:
jkj
输入的数据必须为正整数,请重新输入:
请输入学生个数:
3
请输入学生成绩:
50
请输入学生成绩:
df
输入数据必须为正整数,请重新输入:
请输入学生成绩:
-50
学生成绩必须大于或等于0,请重新输入:
请输入学生成绩:
50
请输入学生成绩:
60
学生总成绩为:160
学生平均成绩为:53.0
及格人数为:1
学生成绩由低到高为: 50  50  60 
学生成绩由高到低为: 60  50  50 

 

上一篇:nginx负载均衡


下一篇:kubernetes中部署Tomcat