老师帮我看一下 成绩排序的问题在哪里?
package com.xieyongchang.students;
//import java.io.Serializable;
public class Student{
private String stu;//学号
private String name;//姓名
private float math;//数学成绩
private float chinese;//语文成绩
//构造方法
public Student(String stu, String name) {
super();
this.stu = stu;
this.name = name;
}
//getter和setter方法
public String getStu() {
return stu;
}
public void setStu(String stu) {
this.stu = stu;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
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;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + Float.floatToIntBits(chinese);
result = prime * result + Float.floatToIntBits(math);
result = prime * result + ((name == null) ? 0 : name.hashCode());
result = prime * result + ((stu == null) ? 0 : stu.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if(this==obj)
return true;
if(this!=obj) {
Student student=(Student)obj;
return (student.getStu().equalsIgnoreCase(stu))&&(student.getName().equals(name))
&&(student.getMath()==math)&&(student.getChinese()==chinese);
}
return false;
}
@Override
public String toString() {
return "学生信息:学号" + stu + ", 姓名:" + name + ", 数学成绩:" + math + ", 语文成绩:" + chinese;
}
}
package com.xieyongchang.students;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Banji {
private String classID;//班级ID
private String className;//班级名称
private List<Student> stuList;//存放学生的集合
Scanner sc=new Scanner(System.in);
//构造方法
public Banji(String classID,String className) {
this.classID=classID;
this.className=className;
stuList=new ArrayList<Student>();
}
//getter和setter方法
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<Student> getStuList() {
return stuList;
}
public void setStuList(List<Student> stuList) {
this.stuList = stuList;
}
/**
* 在学生集合中添加学生信息的方法
* @param student 学生信息
*/
public void addStudent(Student student){
boolean flag=false;
for(Student stu:stuList) {
if(stu.equals(student)) {
//检测有没有重复的学生,重复则flag等于true
flag=true;break;
}
}
if(flag) {
System.out.println("班级里面已经录入该学生的信息!");
}else {
stuList.add(student);
}
System.out.println("录入学生信息成功!");
}
/**
* 通过学号查询学生在班级中是否存在的方法
* @param stuNum学生学号
* @return
*/
public Student searchStudentByNum(String stuNum){
Student stu=null;
//学生学号是唯一的
for(Student stu1:stuList) {
if(stu1.getStu().equals(stuNum)) {
stu=stu1;
break;
}
}
return stu;
}
/**
* 输入班级学生的语文成绩
* @param stuNum学生学号
* @param score 学生语文成绩
*/
public void insertChineseScore(String stuNum,float score){
Student stu=searchStudentByNum(stuNum);//通过学号查询该学生的信息
if(stu==null) {
System.out.println("没有找到学号为"+stuNum+"的信息");
}else {
stu.setChinese(score);//把成绩传进去
}
System.out.println("该学号"+stuNum+"的学生语文成绩输入成功!");
}
/**
* 输入班级学生的数学成绩
* @param stuNum 学生学号
* @param score 学生数学成绩
*/
public void insertMathScore(String stuNum,float score){
Student stu=searchStudentByNum(stuNum);//通过学号查询该学生的信息
if(stu==null) {
System.out.println("没有找到学号为"+stuNum+"的信息");
}else {
stu.setMath(score);
}
System.out.println("该学号"+stuNum+"的学生数学成绩输入成功!");
}
/**
* 删除学习信息
* @param stuNum要删除的学生信息学生学号
*/
public void deleteStudent(String stuNum){
Student stu=searchStudentByNum(stuNum);
if(stu==null) {
System.out.println("没有找到学号为"+stuNum+"的信息");
}else {
stuList.remove(stu);
}
System.out.println(stu.getName()+"的信息已被删除");
}
/**
* 显示所有学生的信息
*/
public void displayAllStudent(){
System.out.println("所有学生的信息为:");
for(Student stu:stuList) {
System.out.println(stu);
}
}
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class School {
private Map<String,Banji> schoolMap;//存放班级信息的集合
//无参构造方法
public School() {
super();
schoolMap=new HashMap<String,Banji>();
}
//getter和setter方法
public Map<String, Banji> getSchoolMap() {
return schoolMap;
}
public void setSchoolMap(Map<String, Banji> schoolMap) {
this.schoolMap = schoolMap;
}
/**
* 添加班级
* @param banji
*/
public void addBanji(Banji banji){
schoolMap.put(banji.getClassName(), banji);
}
/**
* 通过班级名称查询班级:
* @param className
* @return
*/
public Banji searchByName(String className) {
Banji b1=null;
Set<String> s=schoolMap.keySet();
for(String s1:s) {
if(s1.equals(className)) {
b1=schoolMap.get(s1);break;
}
}
return b1;
}
/**
* 删除班级
* @param banji
*/
public void deleteBanji(Banji banji){
schoolMap.remove(banji.getClassName());
System.out.println("删除成功!");
}
/**
* 对各班语文成绩按平均分进行由大到小排序:
*/
public void sortChineseByAverage() {
Map<String,Float> scoreMap=new HashMap<String,Float>();
Set<String> scoreList=schoolMap.keySet();//获取班级名称列表
Banji bi=null;
//遍历班级列表
for(String s:scoreList) {
bi=searchByName(s);
if(bi==null) {
System.out.println("未找到此班级");
}else {
float sum=0.0f;
int i=0;
List<Student> listStudent=bi.getStuList();//获取学生集合 3。获取每个班级的学生列表
//用迭代器遍历学生集合
Iterator<Student> it=listStudent.iterator();//遍历学生集合,计算语文成绩总分
if(it.hasNext()) {
i++;
sum+=it.next().getChinese();
}
//获得平均分
float ave=sum/i;//获取平均分
scoreMap.put(s, ave);//以班级名称为键值,平均分为value值,存入map集合
}
List<Map.Entry<String, Float>> lm=new ArrayList<Map.Entry<String,Float>>();
Collections.sort(lm,new Comparator<Map.Entry<String,Float>>()
{
public int compare(Entry<String,Float> o1,Entry<String,Float> o2)
{
return o2.getValue().compareTo(o1.getValue());
}
});
for(Map.Entry<String,Float> mes:lm) {
System.out.println("排序的数据为:");
System.out.println(mes.getKey()+"的平均分:"+mes.getValue());
}
}
}
/**
* 对各班数学成绩按平均分进行由大到小排序:
*/
public void sortMathByAverage() {
Map<String,Float> scoreMap=new HashMap<String,Float>();
Set<String> scoreList=schoolMap.keySet();//获取班级名称列表
Banji bi=null;
//遍历班级列表
for(String s:scoreList) {
bi=this.searchByName(s);
if(bi!=null) {
float sum=0.0f;
int i=0;
List<Student> listStudent=bi.getStuList();//获取学生集合 3。获取每个班级的学生列表
//用迭代器遍历学生集合
Iterator<Student> it=listStudent.iterator();//遍历学生集合,计算语文成绩总分
while(it.hasNext()) {
i++;
sum+=it.next().getMath();
}
//获得平均分
float ave=sum/i;//获取平均分
scoreMap.put(s, ave);//以班级名称为键值,平均分为value值,存入map集合
}else {
System.out.println("该班级不存在!");
}
List<Map.Entry<String, Float>> lm=new ArrayList<Map.Entry<String,Float>>();//将scoreMap中的每一个键值对存入List集合
Collections.sort(lm,new Comparator<Map.Entry<String,Float>>()
{
public int compare(Entry<String,Float> o1,Entry<String,Float> o2)//对list集合进行排序重写compare方法
{
return o2.getValue().compareTo(o1.getValue());
}
});
for(Map.Entry<String,Float> mes:lm) {
System.out.println("排序的数据为:");
System.out.println(mes.getKey()+"的平均分:"+mes.getValue());//输出排序后的数据
}
}
}
/**
* 显示所有班级名称:
*/
public void displayBanJiName() {
Set<String> s=schoolMap.keySet();
System.out.println("所有的班级名称为:");
for(String n:s) {
System.out.println(n);
}
}
/**
* 添加学生到班级中,查询是否有重复的学生信息
* @param stuNum学生姓名
* @return
*/
public boolean seach(String stuNum) {
int i=0;
Iterator<Banji> it=schoolMap.values().iterator();
while(it.hasNext()) {
if(it.next().searchStudentByNum(stuNum)!=null) {
i++;
}
}
if(i>1)
return true;
else
return false;
}
}
import java.util.List;
import java.util.Scanner;
public class TestDemo {
public void testBanji() {
Student stu1=new Student("s001","张三");
Student stu2=new Student("s002","李四");
Student stu3=new Student("s003","王五");
Student stu4=new Student("s004","五六");
Banji b=new Banji("主班级");
b.addStudent(stu1);
b.addStudent(stu2);
b.addStudent(stu3);
b.addStudent(stu4);
b.insertChineseScore(stu1.getStu(), 45f);
b.insertChineseScore(stu2.getStu(), 56f);
b.insertChineseScore(stu3.getStu(), 78f);
b.insertChineseScore(stu4.getStu(), 412f);
b.insertMathScore(stu1.getStu(), 74);
b.insertMathScore(stu2.getStu(), 98);
b.insertMathScore(stu3.getStu(), 75);
b.insertMathScore(stu4.getStu(), 55);
b.searchStudentByNum(stu1.getStu());
b.deleteStudent(stu3.getStu());
b.displayAllStudent();
}
public void testSchool1(){
Student stu1=new Student("s001","张三");
Student stu2=new Student("s002","李四");
Student stu3=new Student("s003","王五");
Student stu4=new Student("s004","五六");
Banji b=new Banji("主班级");
Banji t=new Banji("普通班");
b.addStudent(stu1);
b.addStudent(stu2);
b.addStudent(stu3);
b.addStudent(stu4);
b.insertChineseScore(stu1.getStu(), 45f);
b.insertChineseScore(stu2.getStu(), 56f);
b.insertChineseScore(stu3.getStu(), 78f);
b.insertChineseScore(stu4.getStu(), 412f);
b.insertMathScore(stu1.getStu(), 74);
b.insertMathScore(stu2.getStu(), 98);
b.insertMathScore(stu3.getStu(), 75);
b.insertMathScore(stu4.getStu(), 55);
School s=new School();
s.addBanji(b);
s.addBanji(t);
s.searchByName("主班级");
s.searchByName("普通班");
s.displayBanJiName();
s.deleteBanji(t);
System.out.println("删除之后:");
s.displayBanJiName();
s.sortChineseByAverage();
s.sortMathByAverage();
}
//主菜单
public void mainMenu(){
System.out.println("*************************************");
System.out.println(" **主菜单**");
System.out.println(" 1--班级管理 ");
System.out.println(" 2--学校管理 ");
System.out.println(" 0--退出 ");
System.out.println("*************************************");
}
//班级管理菜单
public void banJiMenu(){
System.out.println("********************************************");
System.out.println(" **班级主菜单**");
System.out.println(" 1--添加学生信息到主学生列表");
System.out.println(" 2--添加学生信息到普通班级");
System.out.println(" 3--通过学生名字查找学生信息");
System.out.println(" 4--输入班级学生的语文成绩");
System.out.println(" 5--输入班级学生的数学成绩");
System.out.println(" 6--删除学生信息");
System.out.println(" 7--显示所有学生的信息");
System.out.println(" 9--返回上一级菜单");
System.out.println("********************************************");
}
//学校管理
public void schoolMenu(){
System.out.println("*********************************************************");
System.out.println(" **学校管理菜单**");
System.out.println(" 1--创建班级");
System.out.println(" 2--删除班级");
System.out.println(" 3--通过班级名称查询班级信息");
System.out.println(" 4--对各班语文成绩按平均分进行由大到小排序");
System.out.println(" 5--对各班数学成绩按平均分进行由大到小排序");
System.out.println(" 6--显示所有班级名称");
System.out.println(" 9--返回上一级菜单");
System.out.println("********************************************");
}
//主流程
public void test() {
TestDemo t=new TestDemo();
Scanner sc=new Scanner(System.in);
int input=0,input1=0,input2=0;
//创建一个班级容器
School banji=new School();
//创建主学生列表
Banji student=new Banji("000","主学生列表");
//将主学生列表放进学校集合中
banji.addBanji(student);
//流程开始
while(true) {
t.mainMenu();
System.out.println("请输入对应数字进行操作:");
try{
input=sc.nextInt();
}catch(Exception e) {
System.out.println("输入有误!请重新输入");
sc.next();
continue;
}
if(input==0) break;
switch(input) {
case 1:
t.banJiMenu();
System.out.println("请输入对应数字进行操作:");
input1=sc.nextInt();
if(input==9)
break;
switch(input1) {
case 1:
//添加学生信息到主学生列表
System.out.println("将学生添加到主学生列表");
System.out.println("请输入要添加的学生数量:");
int count=sc.nextInt();
for(int i=1;i<=count;i++) {
System.out.println("请输入第"+i+"个学生的信息");
System.out.println("请输入学生学号:");
String stu=sc.next();
System.out.println("请输入学生名字:");
String stuNum=sc.next();
//创建学生类对象
Student student1=new Student(stu,stuNum);
student.addStudent(student1);
}
student.displayAllStudent();
break;
case 2:
//添加学生信息到普通班级
System.out.println("将主学生列表中的学生信息添加到班级");
System.out.println("请输入要添加的班级名称");
String ban=sc.next();
//通过名字查询查询班级
Banji b1=banji.searchByName(ban);
if(b1==null) {
System.out.println("该班级不存在!请先添加班级到学校中");
}else if(b1.equals(student)){
System.out.println("不能选主学生列表添加!");
}else {
System.out.println("请输入要添加学生信息的数量:");
int count2=0;
try{
count2=sc.nextInt();
}catch(Exception e) {
System.out.println("输入有误!请重新输入:");
sc.next();
continue;
}
if(count2>student.getStuList().size()) {
System.out.println("输入的数值不能大于主学生列表的学生数量!");
break;
}
for(int i=1;i<=count2;i++) {
System.out.println("请输入学生ID:");
String str2=sc.next();
Student stu=student.searchStudentByNum(str2);
if(stu==null) {
System.out.println("该学生不存在!");
break;
}else if(banji.seach(str2)) {
System.out.println("该学生已经添加到班级中了,不能添加!");
break;
}
b1.addStudent(stu);
}
}
b1.displayAllStudent();
break;
case 3:
//通过学生名字查找学生信息
System.out.println("通过学生名字查找学生信息");
System.out.println("请输入要查找的学生班级名称:");
String str2=sc.next();
Banji b3=banji.searchByName(str2);
if(b3==null) {
System.out.println("该班级不存在!请核对班级名称");
}else {
System.out.println("请输入学生ID:");
String str3=sc.next();
Student stu3=b3.searchStudentByNum(str3);
if(stu3==null) {
System.out.println("该学生不在"+str2+"中!");
break;
}else {
System.out.println(str3+"的信息为:");
System.out.println(stu3);
}
}
break;
case 4:
//输入班级学生的语文成绩
System.out.println("输入班级学生的语文成绩");
System.out.println("请输入要输入成绩的班级名称");
String str4=sc.next();
Banji b4=banji.searchByName(str4);
if(b4==null) {
System.out.println("该班级不存在!");
}else {
List<Student> list1=b4.getStuList();//获取该班级的学生信息表
if(list1.size()==0) {
System.out.println("该班级还未添加学生!请先添加学生");
}
for(int i=0;i<list1.size();i++) {
String stuName=list1.get(i).getStu();
System.out.println("学号为"+stuName);
System.out.println("请输入成绩:");
float sce=0;
try{
sce=sc.nextFloat();
}catch(Exception e) {
System.out.println("不能有非数字,请重新输入!");
sc.next();
continue;
}
b4.insertChineseScore(stuName, sce);
}
}
break;
case 5:
//输入班级学生的数学成绩
System.out.println("输入班级学生的数学成绩");
System.out.println("请输入要输入成绩的班级名称");
String str5=sc.next();
Banji b5=banji.searchByName(str5);
if(b5==null) {
System.out.println("该班级不存在!");
}else {
List<Student> list1=b5.getStuList();//获取该班级的学生信息表
if(list1.size()==0) {
System.out.println("该班级还未添加学生!请先添加学生");
}
for(int i=0;i<list1.size();i++) {
String stuName=list1.get(i).getStu();
System.out.println("学号为"+stuName);
System.out.println("请输入成绩:");
float sce=0;
try{
sce=sc.nextFloat();
}catch(Exception e) {
System.out.println("不能有非数字,请重新输入!");
sc.next();
continue;
}
b5.insertMathScore(stuName, sce);
}
}
break;
case 6:
//删除学生信息
System.out.println("删除学生信息");
System.out.println("请输入要删除学生的班级");
String str6=sc.next();
Banji b6=banji.searchByName(str6);
if(b6==null) {
System.out.println("该班级不存在!");
}else {
System.out.println("请输入要删除学生的学号:");
String str66=sc.next();
b6.deleteStudent(str66);
}
break;
case 7:
//显示所有学生的信息
student.displayAllStudent();
break;
}
break;
case 2:
t.schoolMenu();
System.out.println("请输入对应的数字进行操作:");
try {
input2=sc.nextInt();
}catch(Exception e) {
System.out.println("输入有误!请重新输入");
sc.next();
continue;
}
if(input2==9)break;
switch(input2) {
case 1://创建班级
System.out.println("创建班级");
System.out.println("请输入班级ID:");
String id=sc.next();
System.out.println("请输入班级名称:");
String name=sc.next();
//创建班级
Banji b1=new Banji(id,name);
banji.addBanji(b1);
break;
case 2://删除班级
System.out.println("删除班级");
System.out.println("请输入要删除的班级名称:");
String classname=sc.next();
Banji b2=banji.searchByName(classname);
if(b2==null) {
System.out.println("该班级不存在!");
}else if(b2.equals(student)) {
System.out.println("主学生列表不能删除!");
}else {
banji.deleteBanji(b2);
}
break;
case 3://通过班级名称查询班级信息
System.out.println("通过班级名称查询班级信息");
System.out.println("请输入要查询的班级名称:");
String str3=sc.next();
Banji b3=banji.searchByName(str3);
if(b3==null) {
System.out.println("该班级不存在!");
}else {
b3.displayAllStudent();
}
break;
case 4://对各班语文成绩按平均分进行由大到小排序
banji.sortChineseByAverage();
break;
case 5://对各班数学成绩按平均分进行由大到小排序
banji.sortMathByAverage();
break;
case 6://显示所有班级名称
System.out.println("显示所有班级名称");
banji.displayBanJiName();
break;
default:
System.out.println("输入不正确,请重新输入!");
break;
}
break;
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
TestDemo t=new TestDemo();
//t.testBanji();
//t.testSchool();
t.test();
}
}
正在回答 回答被采纳积分+1
同学你好,修改后的语文成绩排序的代码如下:
// 对各班语文成绩按平均分进行由大到小排序 public void sortChineseByAverage() { Map<String, Float> score = new HashMap<String, Float>(); Banji banJi = null; List<Student> stuList = null; float sum = 0.0f; float average = 0.0f; // 求各班平均分 // 得到所有班对应的班级名称,根据名称得到班级对象 Set<String> nameSet = schoolMap.keySet(); if (nameSet != null) { for (String s : nameSet) { if (s.equals("主学生列表")) continue; sum = 0.0f; banJi = schoolMap.get(s); stuList = banJi.getStuList(); if (stuList != null) { for (Student stu : stuList) { sum = sum + stu.getChinese(); } // 求平均分 average = sum / stuList.size(); // 将每个班级的平均分添加到列表score中 score.put(banJi.getClassName(), average); } else { System.out.println("该班级没有学生!"); } } } else { System.out.println("还未添加班级!"); } // 输出排序后的学生成绩(提供排序的代码) // 先将Map转换到List中,也就是将Map的Entry存放的List中 List<Map.Entry<String, Float>> list = new ArrayList<Map.Entry<String, Float>>(score.entrySet()); // 按照Map的Value值进行排序 Collections.sort(list, new Comparator<Map.Entry<String, Float>>() { // 降序排序 @Override public int compare(Entry<String, Float> o1, Entry<String, Float> o2) { // return o1.getValue().compareTo(o2.getValue()); return o2.getValue().compareTo(o1.getValue()); } }); for (Map.Entry<String, Float> mapping : list) { System.out.println(mapping.getKey() + ":" + mapping.getValue()); } }
数学成绩排序:
public void sortMathByAverage() { Map<String, Float> score = new HashMap<String, Float>(); Banji banJi = null; List<Student> stuList = null; float sum = 0.0f; float average = 0.0f; // 求各班平均分 // 得到所有班对应的班级名称,根据名称得到班级对象 Set<String> nameSet = schoolMap.keySet(); if (nameSet != null) { for (String s : nameSet) { if (s.equals("主学生列表")) continue; sum = 0.0f; banJi = schoolMap.get(s); stuList = banJi.getStuList(); if (stuList != null) { for (Student stu : stuList) { sum = sum + stu.getMath(); } // 求平均分 average = sum / stuList.size(); // 将每个班级的平均分添加到列表score中 score.put(banJi.getClassName(), average); } else { System.out.println("该班级没有学生!"); } } } else { System.out.println("还未添加班级!"); } // 输出排序后的学生成绩(提供排序的代码) // 先将Map转换到List中,也就是将Map的Entry存放的List中 List<Map.Entry<String, Float>> list = new ArrayList<Map.Entry<String, Float>>(score.entrySet()); // 按照Map的Value值进行排序 Collections.sort(list, new Comparator<Map.Entry<String, Float>>() { // 降序排序 @Override public int compare(Entry<String, Float> o1, Entry<String, Float> o2) { // return o1.getValue().compareTo(o2.getValue()); return o2.getValue().compareTo(o1.getValue()); } }); for (Map.Entry<String, Float> mapping : list) { System.out.println(mapping.getKey() + ":" + mapping.getValue()); } }
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星