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