请问老师,平均分排序问题该怎么做?
package studentmanagement;
import java.util.Objects;
public class Student {
private String stuNum;//学号
private String stuName;//名字
private float math;//数学分数
private float chinese;//语文分数
public Student(String stuNum, String stuName, float math, float chinese) {
this.stuNum = stuNum;
this.stuName = stuName;
this.math = math;
this.chinese = chinese;
}
/**
* 判断学生是否存在
* @param o 学生
* @return 是否存在
*/
@Override
public boolean equals(Object o) {
if(this==o){
return true;
}else{
if(o.getClass()==Student.class){
Student sd=(Student) o;
return (sd.getStuNum().equals(stuNum))&&
(sd.getStuName().equals(stuName));
}
}
return false;
}
@Override
public String toString() {
return "{" +
"学生编号='" + stuNum + '\'' +
", 学生名字='" + stuName + '\'' +
", 数学成绩=" + math +
", 语文成绩=" + chinese +
'}';
}
@Override
public int hashCode() {
return Objects.hash(stuNum, stuName, math, chinese);
}
public String getStuNum() {
return stuNum;
}
public void setStuNum(String stuNum) {
this.stuNum = stuNum;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public float getMath() {
return math;
}
public void setMath(float math) {
this.math = math;
}
public float getChinese() {
return chinese;
}
public void setChinese(float chinese) {
this.chinese = chinese;
}
}package studentmanagement;
import com.imooc.Player.PlayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class School {
private Map<String,BanJi> schoolMap;//存放班级的集合
public School() {
schoolMap=new HashMap<String,BanJi>();
}
/**
* 添加班级
* @param banji
*/
public void addBanji(BanJi banji){
//添加班级,键对值:班级id,班级
schoolMap.put(banji.getClassName(),banji);
}
/**
* 删除班级
* @param banji
*/
public void deleteBanji(BanJi banji){
System.out.println("您要删除的是:"+banji.getClassId()+" "+banji.getClassName());
schoolMap.remove(banji.getClassName());
System.out.println("删除成功!");
}
/**
* 通过班级名称查询班级
* @param className 班级名称
*/
public BanJi searchByName(String className) {
BanJi banji=null;
Set<String> banjiSet=schoolMap.keySet();
for(String s:banjiSet){
if(s.equals(className)){
//如果查到了,储存到banji上
banji=schoolMap.get(s);
System.out.println("班级的id为:"+banji.getClassId()+" 班级的名字为:"+banji.getClassName());
break;
}
}
return banji;
// }
}
/**
*对各班语文成绩按平均分进行由大到小排序
*/
public void sortChineseByAverage() {
}
/**
*对各班数学成绩按平均分进行由大到小排序
*/
public void sortMathByAverage() {}
/**
* 显示所有班级名称
*/
public void displayBanJiName() {
Set<String> schoolMapSet=schoolMap.keySet();
System.out.println("现有班级为::");
for(String s:schoolMapSet){
System.out.println(s);
}
}
}package studentmanagement;
import com.imooc.Player.Song;
import java.util.ArrayList;
import java.util.List;
public class BanJi {
private String classId;//班级编号
private String className;//班级名字
private List<Student> stuList;//存放学生的集合
public BanJi(String classId, String className) {
this.classId = classId;
this.className = className;
stuList=new ArrayList<Student>();
}
public String getClassId() {
return classId;
}
public void setClassId(String classId) {
this.classId = classId;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public List getStuList() {
return stuList;
}
public void setStuList(List stuList) {
this.stuList = stuList;
}
/**
* 将学生添加进班级
* @param stu 学生
*/
public void addStudent(Student stu){
//判断是否存在
Boolean flag=false;
for(Student stu1:stuList){
if(stu1.equals(stu)){
flag=true;
//System.out.println("添加失败,该学生已经存在!!");
break;
}
}
if(flag){
System.out.println("添加失败,该学生已经存在!!");
}else{
stuList.add(stu);
System.out.println("添加成功!");
}
}
/**
* 通过学号查询学生在班级中是否存在
* @param stuNum 学号
* @return 是否存在
*/
public Student searchStudentByNum(String stuNum){
Student sd=null;
for(Student sd1:stuList){
if(sd1.getStuNum()==stuNum){
//如果相等就找到了
sd=sd1;
break;
}
}
return sd ;
}
/**
* 输入班级学生的语文成绩
* @param stuNum 学生
* @param score 语文成绩
*/
public void insertChineseScore(String stuNum,float score){
Student student1=searchStudentByNum(stuNum);
if(student1!=null) {
student1.setChinese(score);
System.out.println("添加成功");
}else{
System.out.println("该学生不存在,请先添加");
}
}
/**
* 输入班级学生的数学成绩
* @param stuNum 学生
* @param score 数学成绩
*/
public void insertMathScore(String stuNum,float score){
Student student1=searchStudentByNum(stuNum);
if(student1!=null) {
student1.setMath(score);
System.out.println("添加成功");
}else{
System.out.println("该学生不存在,请先添加");
}
}
/**
* 删除学生信息
* @param stuNum 学生
*/
public void deleteStudent(String stuNum){
Student student2=searchStudentByNum(stuNum);
if(student2!=null) {
stuList.remove(student2);
System.out.println("删除成功");
}else{
System.out.println("该学生不存在");
}
}
/**
* 显示所有学生信息(包括学号和名字)
*/
public void displayAllStudent(){
System.out.println("班级中所有学生信息为:");
for(Student student:stuList){
System.out.println(student);
}
}
}package studentmanagement;
import java.util.ArrayList;
import java.util.List;
public class TestDemo {
/**
* 班级测试
*/
public void testBanJi(){
Student student1=new Student("s001","张三",50,60);
Student student2=new Student("s002","李死",60,70);
Student student3=new Student("s003","王五",70,80);
Student student4=new Student("s004","老六",80,90);
BanJi banji=new BanJi("a001","学前一班");
banji.addStudent(student1);
banji.addStudent(student2);
banji.addStudent(student3);
banji.addStudent(student4);
//判断学生是否全部添加到班级里
banji.displayAllStudent();
{
//测试删除方法
banji.deleteStudent("s002");
banji.displayAllStudent();
}
System.out.println("-----------------------");
//通过编号查询信息
System.out.println("查询到的信息为:"+banji.searchStudentByNum("s003"));
System.out.println("-----------------------");
//添加(修改)语文成绩和数学成绩
banji.insertChineseScore("s001",99);
banji.insertMathScore("s001",80);
System.out.println("查询到的信息为:"+banji.searchStudentByNum("s001"));
}
/**
* 学校测试
*/
public void testSchool(){
Student student1=new Student("s001","张三",50,60);
Student student2=new Student("s002","李死",60,70);
Student student3=new Student("s003","王五",70,80);
Student student4=new Student("s004","老六",80,90);
BanJi banji1=new BanJi("a001","一班");
BanJi banji2=new BanJi("a002","二班");
BanJi banji3=new BanJi("a003","三班");
BanJi banji4=new BanJi("a004","四班");
banji1.addStudent(student1);
banji1.addStudent(student2);
banji1.addStudent(student3);
banji1.addStudent(student4);
School sh = new School();
sh.addBanji(banji1);
sh.addBanji(banji2);
sh.addBanji(banji3);
sh.addBanji(banji4);
//测试查找班级
BanJi banJi1=sh.searchByName("四班");
if(banJi1==null){
System.out.println("班级不存在");
}
//删除班级
sh.deleteBanji(banji2);
//查看全部班级
sh.displayBanJiName();
}
/**
* 主菜单
*/
public void mainMenu(){}
/**
* 学校管理菜单
*/
public void schoolMenu(){}
/**
* 班级管理菜单
*/
public void banJiMenu(){}
/**
* 主流程
*/
public void test(){}
public static void main(String[] args) {
TestDemo td=new TestDemo();
// td.testBanJi();
td.testSchool();
}
}没思路了呀,不会写
正在回答
同学你好,老师这里给同学提供一些思路,同学可以参考着自己去实现一下。
首先,如果需要计算平均成绩,那么首先要保证各个班级中添加了学生,并且学生添加过成绩。
那么在保证了学生已经添加过成绩时,可以将业务流程拆分成以下环节:
一、将每个班级的所有学生成绩取出,并计算总成绩以便于计算平均成绩
二、将班级信息以及平均成绩存储在集合中,以便于根据班级进行排序
三、输出集合信息,展示排序后的结果。
此时,再将以上三步进行拆解:
第一步:
1.需要遍历学校的集合,取出所有班级,这是一次集合的遍历;
2.在上面的基础上,每次获取的班级中又有学生集合,那么再次获取学生集合,这也是一次集合的遍历;
3.在遍历学生集合时,将学生成绩取出,并使用变量将成绩进行累加;
4.计算该班级平均成绩,即总成绩除以学生集合的size;
5.将班级信息和平均成绩进行存储,此时需要单独声明一个Map集合,key是班级信息(可以简单使用班级名称),value是班级的平均成绩。
第二步:
1.当第一步的学校集合遍历结束,各个班级及其平均成绩已经存储在第一步第5步的Map集合中了;
2.将Map集合中所有的Entry对象取出,存放在List中;
3.声明一个比较器,用于根据学生成绩进行排序。比较器中对比的是List集合中的Entry对象,比较规则是根据value进行排序;
4.使用Collections工具类中的sort方法,将List集合进行排序。
第三步:
当完成上述步骤之后,List集合中的所有Entry对象已经根据班级信息进行了排序,可以进行输出展示了。
以上就是根据平均成绩进行排序的思路,这里还有个小细节,就是主学生列表不应当参与排序,所以在遍历学校的班级列表时,主学生列表可以排除在外。
同学可以根据上面的提示,自己尝试实现一下,如果还有问题,可以继续提问,
祝学习愉快~
- 参与学习 人
- 提交作业 9410 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星