刚才不小心按了采纳没法在刚才那条回复~新开了一个~

刚才不小心按了采纳没法在刚才那条回复~新开了一个~

大神,我在班级类里按你说的,创建了对班级的语文成绩按平均分进行由大到小排序的方法:

public float getAveChinese() {
		float sum = 0;
		int count = 0;
		float aveChinese = 0;
		for (int i = 0; i < mainStuList.size(); i++) {
			sum += mainStuList.get(i).getChinese();
			count++;
		}
		aveChinese = sum / count;
		return aveChinese;
	}

然后在school类里创建了一个按照班级语文平均分排序内部类:

public class SortChinese implements Comparator<Banji> {

		@Override
		public int compare(Banji o1, Banji o2) {
			float score1 = o1.getAveChinese();
			float score2 = o2.getAveChinese();
			int n = (int) (score2 - score1);
			return n;
		}
	}

但是到了最后一步:创建班级对象的列表banJiList,并排序,我不知道怎么做了:

/**
	 * 对各班语文成绩按平均分进行由大到小排序
	 */
	public void sortChineseByAverage() {
		List<Banji> banjiChiList = new ArrayList<>();
		System.out.println("根据语文平均分排序后的班级名称为:");
		banjiChiList.sort(new SortChinese());
	}


正在回答

登陆购买课程后可参与讨论,去登陆

10回答
//判断学校是否有条件可以排序成绩
public boolean canSort() {
    List<BanJi> banJiList = getClassList();  //获取除主学生列表以外的班级列表
    if (banJiList.isEmpty()) {  //判断学校内是否有班级
        System.out.println("学校还未添加班级");
        return false;
    } else {  //判断所有班级中是否都有学生,是否有成绩
        //  这里代码你自己添加吧,全给你就没意思了。
    }
}

//对各班语文成绩按平均分进行由大到小排序:
public void sortChineseByAverage() {
    if (canSort()) {
        List<BanJi> banJiList = getClassList();
        banJiList.sort(new SortChinese());
        System.out.println("语文平均成绩从大到小为:");
        for (BanJi banJi : banJiList) {
            System.out.println(banJi.getClassName() + "的平均分:" + banJi.getAvgChinese());
        }
    }
}

getClassList()就是获取班级列表(除“主学生列表”外)。其他你应该能看懂了

  • Heijyu 提问者 #1
    你好,请问那个getClassList()是属于哪个类里的方法啊?我好像只看到有getClass()方法哎?
    2020-06-25 11:41:50
  • 慕丝1539783 回复 提问者 Heijyu #2
    getClassList()能在这里直接调用,那肯定就是school类里的方法,这个方法是自己写的,因为我很多地方有用到这个班级的列表,所以单独写一个方法出来。
    2020-06-25 13:34:01
  • 而且我这个getClassList()是剔除了"主学生列表"后的list,方便其他方法调用。
    2020-06-25 13:38:01
好帮手慕小尤 2020-06-25 10:27:42

同学你好,1. 输入班级的语文和数学成绩,建议先输入班级名称,判断班级是否存在。班级存在则提示:输入学号为xx的学生成绩。如果班级不存在则提示。修改后代码如下所示:

http://img1.sycdn.imooc.com//climg/5ef409f109c8578209150735.jpg


2. 在添加语文与数学成绩时,调用的都是insertChineseScore()方法,则建议同学在添加数学成绩时,调用insertMathScore()方法。如上图所示:

3. 同学已实现排序,只是在数学排序时应该使用SortMath()类。修改后代码如下所示:

http://img1.sycdn.imooc.com//climg/5ef40b70091e88e108470453.jpg

如果我的回答解决了你的疑惑,请采纳,祝学习愉快~

  • 提问者 Heijyu #1
    老师,关于插入成绩的那一块我感觉好像没有必要要先加班级判断呀,一个是因为一个学号才能对应一个科目的成绩呀(跟班级没有关系呀),而且成绩就是学生本身的一个attribute啊, 这样它就有相应的set方法可以直接就保存到学生对象里了呀?为什么还要对班级进行判断呢?从现实生活来讲,也是应该直接通过学号输入成绩才对呀,不用通过班级的呀~
    2020-06-25 11:02:35
  • 现实生活中,正常情况下是学生要先有班级,才能考试,才能有成绩。 这个作业,其实单纯写功能其实不算太难,难的是要在要在每个功能前进行各种判断。
    2020-06-25 13:54:05
  • 提问者 Heijyu 回复 慕丝1539783 #3
    好的~那我加上这一部分的判断~谢谢你~
    2020-06-25 15:32:56
Heijyu 提问者 2020-06-24 19:11:49
TestDemo的最后的部分
/**
	 * 主流程
	 */
	public void test() {
		TestDemo td = new TestDemo();
		Scanner sc = new Scanner(System.in);
		String input;
		School school = new School();
		Banji mainBanji = new Banji("默认学生列表");
		school.addBanji(mainBanji);
		Banji norBanji = null;
		int count = 0;
		String strStuNum;
		String strStuName;
		Student stu;
		String bjName;
		boolean flag;
		while (true) {
			td.mainMenu();
			System.out.println("请输入相应的数字进行操作:");
			input = sc.next();
			if (input.equals("0")) {
				System.exit(0);
			}
			switch (input) {
			case "1":
				while (true) {
					td.banjiMenu();
					System.out.println("请输入相应的数字进行操作:");
					input = sc.next();
					if (input.equals("9")) {
						break;
					}
					switch (input) {
					case "1":// 添加学生到主学生列表
						System.out.println("**将学生信息添加到主学生列表**");
						System.out.println("请输入要添加的学生个数:");
						try {
							count = sc.nextInt();
						} catch (InputMismatchException e) {
							System.out.println("不能有非数字,请重新输入!");
							sc.nextInt();
						}
						for (int i = 1; i <= count; i++) {
							System.out.println("请输入第" + i + "个学生的学号:");
							strStuNum = sc.next();
							System.out.println("请输入第" + i + "个学生的姓名:");
							strStuName = sc.next();
							stu = new Student(strStuNum, strStuName);
							mainBanji.addStudent(stu);
							System.out.println("添加学生操作完成!");
						}
						break;
					case "2":// 添加学生到普通班级
						System.out.println("**将学生信息添加到普通班级列表**");
						System.out.println("请输入要添加学生的普通班级名称:");
						bjName = sc.next();
						norBanji = school.searchByName(bjName);
						if (norBanji == null) {
							System.out.println("该班级不存在,请先创建相应班级!");
							break;
						} else {
							System.out.println("请输入要添加的学生个数:");
							count = 0;
							try {
								count = sc.nextInt();
							} catch (InputMismatchException e) {
								System.out.println("不能有非数字,请重新输入!");
								sc.nextInt();
							}
							for (int i = 1; i <= count; i++) {
								System.out.println("请输入第" + i + "个学生的学号:");
								strStuNum = sc.next();
								stu = mainBanji.searchStudentByNum(strStuNum);
								Student stu1 = null;
								if (stu == null) {
									System.out.println("请输入第" + i + "个学生的姓名:");
									strStuName = sc.next();
									stu1 = new Student(strStuNum, strStuName);
									mainBanji.addStudent(stu1);
									norBanji.addStudent(stu1);
									System.out.println("添加学生操作完成!");
									mainBanji.displayAllStudent();
									norBanji.displayAllStudent();
								} else {
									norBanji.addStudent(stu);
									System.out.println("添加学生操作完成!");
									norBanji.displayAllStudent();
								}
							}
						}
						break;
					case "3":// 通过学号查询学生信息
						System.out.println("**通过学号查询学生信息**");
						System.out.println("请输入要查询学生的班级名称:");
						bjName = sc.next();
						norBanji = school.searchByName(bjName);
						if (norBanji == null) {
							System.out.println("该班级不存在!");
							break;
						} else {
							System.out.println("该班级存在!");
							System.out.println("请输入要查询学生的学号:");
							strStuNum = sc.next();
							// 如果学生不在普通班级列表,则查看是否在默认学生列表
							System.out.println("查询到的学生信息为:");
							System.out.println(norBanji.searchStudentByNum(strStuNum));
						}
						break;
					case "4":// 输入学生的语文成绩
						System.out.println("**输入学生的语文成绩**");
						System.out.println("请输入要登记语文成绩的学生的数量:");
						try {
							count = sc.nextInt();
						} catch (InputMismatchException e) {
							System.out.println("不能有非数字,请重新输入!");
						}
						for (int i = 0; i < count; i++) {
							System.out.println("请输入要登记语文成绩的学生的学号:");
							strStuNum = sc.next();
							stu = mainBanji.searchStudentByNum(strStuNum);
							if (stu == null) {
								System.out.println("该学生不存在!");
								break;
							} else {
								System.out.println("请输入第" + (i + 1) + "位学生的语文成绩:");
								float chiScore = 0;
								try {
									chiScore = sc.nextFloat();
								} catch (InputMismatchException e) {
									System.out.println("不能有非数字或格式不对的成绩,请重新输入!");
								}
								mainBanji.insertChineseScore(strStuNum, chiScore);
							}
						}
						break;
					case "5":// 输入学生的数学成绩
						System.out.println("**输入学生的数学成绩**");
						System.out.println("请输入要登记数学成绩的学生的数量:");
						try {
							count = sc.nextInt();
						} catch (InputMismatchException e) {
							System.out.println("不能有非数字,请重新输入!");
						}
						for (int i = 0; i < count; i++) {
							System.out.println("请输入要登记数学成绩的学生的学号:");
							strStuNum = sc.next();
							stu = mainBanji.searchStudentByNum(strStuNum);
							if (stu == null) {
								System.out.println("该学生不存在!");
								break;
							} else {
								System.out.println("请输入第" + (i + 1) + "位学生的数学成绩:");
								float mathScore = 0;
								try {
									mathScore = sc.nextFloat();
								} catch (InputMismatchException e) {
									System.out.println("不能有非数字或格式不对的成绩,请重新输入!");
								}
								mainBanji.insertChineseScore(strStuNum, mathScore);
							}
						}
						break;
					case "6":// 删除学生信息
						System.out.println("**删除学生信息**");
						System.out.println("请输入要删除的学生的所在班级名称:");
						bjName = sc.next();
						norBanji = school.searchByName(bjName);
						if (norBanji != null) {
							System.out.println("请输入要删除的学生的学号:");
							strStuNum = sc.next();
							stu = norBanji.searchStudentByNum(strStuNum);
							if (stu != null) {
								mainBanji.deleteStudent(strStuNum);
								norBanji.deleteStudent(strStuNum);
							} else {
								stu = mainBanji.searchStudentByNum(strStuNum);
								if (stu != null) {
									mainBanji.deleteStudent(strStuNum);
								}
							}
						} else {
							System.out.println("该班级不存在");
						}
						break;
					case "7":// 显示所有学生信息
						System.out.println("**显示所有学生信息**");
						flag = mainBanji.getStuList().isEmpty();
						if (flag == true) {
							System.out.println("列表为空,尚未添加学生信息!");
						} else {
							mainBanji.displayAllStudent();
						}
						break;
					default:
						System.out.println("该数字没有相应的操作!");
						break;
					}
				}
				break;
			case "2":
				while (true) {
					td.schoolMenu();
					System.out.println("请输入相应的数字进行操作:");
					input = sc.next();
					if (input.equals("9")) {
						break;
					}
					switch (input) {
					case "1":// 创建班级
						System.out.println("**创建班级**");
						System.out.println("请输入要创建的班级名称:");
						bjName = sc.next();
						norBanji = school.searchByName(bjName);
						if (norBanji == null) {
							norBanji = new Banji(bjName);
							school.addBanji(norBanji);
						} else {
							System.out.println("该班级已存在!");
						}
						break;
					case "2":// 删除班级
						System.out.println("**删除班级**");
						System.out.println("请输入要删除的班级名称:");
						bjName = sc.next();
						norBanji = school.searchByName(bjName);
						if (bjName.equals("默认学生列表")) {
							System.out.println("默认学生列表不能删除!");
							break;
						}
						if (norBanji != null) {
							school.deleteBanji(norBanji);
						} else {
							System.out.println("该班级不存在,不能删除!");
						}
						break;
					case "3":// 通过班级名称查询班级信息
						System.out.println("**通过班级名称查询班级信息**");
						System.out.println("请输入要查询的班级名称:");
						bjName = sc.next();
						norBanji = school.searchByName(bjName);
						if (norBanji == null) {
							System.out.println("该班级不存在!");
						} else {
							System.out.println("该班级存在,班级信息为:");
							norBanji.displayAllStudent();
						}
						break;
					case "4":// 对各班语文成绩按平均分由大到小排序
						System.out.println("排序前的班级列表为:");
						school.displayBanJiName();
						System.out.println("**对各班语文成绩按平均分由大到小排序**");
						school.sortChineseByAverage();
						break;
					case "5":// 对各班数学成绩按平均分由大到小排序
						System.out.println("**对各班数学成绩按平均分由大到小排序**");
						school.sortMathByAverage();
						break;
					case "6":// 显示所有班级名称
						System.out.println("**显示所有班级名称**");
						school.displayBanJiName();
						break;
					default:
						System.out.println("该数字没有相应的操作!");
						break;
					}
				}
				break;
			default:
				System.out.println("该数字没有相应的操作!");
				break;
			}
		}
	}
	public static void main(String[] args) {
		TestDemo td = new TestDemo();
		td.test();
	}
}


Heijyu 提问者 2020-06-24 19:11:12
最后的TestDemo类

package studentmanagement;
import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Scanner;
public class TestDemo {
	/**
	 * 主菜单
	 */
	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 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 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("*********************************************************");
	}
	
Heijyu 提问者 2020-06-24 19:08:06
Student 类
package studentmanagement;

public class Student {
	private String stuNum;
	private String stuName;
	private float math;
	private float chinese;

	/**
	 * 学生类无参构造方法
	 */
	public Student() {
		this(null, null);
	}

	/**
	 * 学生类带参构造方法
	 * 
	 * @param stuNum  学号
	 * @param stuName 姓名
	 * @param math    数学成绩
	 * @param chinese 语文成绩
	 */
	public Student(String stuNum, String stuName, float math, float chinese) {
		this.setStuNum(stuNum);
		this.setStuName(stuName);
		this.setMath(math);
		this.setChinese(chinese);
	}

	/**
	 * 学生类带参构造方法
	 * 
	 * @param stuNum  学号
	 * @param stuName 姓名
	 */
	public Student(String stuNum, String stuName) {
		this.setStuNum(stuNum);
		this.setStuName(stuName);
	}

	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;
	}

	@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 + ((stuName == null) ? 0 : stuName.hashCode());
		result = prime * result + ((stuNum == null) ? 0 : stuNum.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj) {
			return true;
		}
		if (obj.getClass() == Student.class) {
			Student stu = (Student) obj;
			return (stu.getStuNum().equals(stuNum) && (stu.getStuName().equals(stuName)) && (stu.getMath() == math)
					&& (stu.getChinese() == chinese));
		}
		return false;
	}

	@Override
	public String toString() {
		return "学生信息: [学号:" + getStuNum() + ", 姓名:" + getStuName() + "]";
	}

}

Banji类

package studentmanagement;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
public class Banji {
	private String classId;
	private String className;
	private List<Student> mainStuList;
	/**
	 * 班级类无参构造方法
	 */
	public Banji() {
		this(null, null);
	}
	/**
	 * 班级类带参构造方法
	 * 
	 * @param classId   班级编号
	 * @param className 班级名称
	 */
	public Banji(String classId, String className) {
		this.setClassId(classId);
		this.setClassName(className);
		mainStuList = new ArrayList<Student>();
	}
	public Banji(String className) {
		this.setClassName(className);
		mainStuList = 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<Student> getStuList() {
		return mainStuList;
	}
	public void setStuList(List<Student> stuList) {
		this.mainStuList = stuList;
	}
	/**
	 * 向班级中添加学生的方法
	 * 
	 * @param stu 学生
	 */
	public void addStudent(Student stu) {
		boolean flag = false;
		for (Student stu1 : mainStuList) {
			if (stu1.equals(stu)) {
				flag = true;
				break;
			}
		}
		if (flag) {
			System.out.println("该学生已存在,无需重复添加!");
		} else {
			mainStuList.add(stu);
		}
	}
	/**
	 * 根据学号查询学生信息的方法
	 * 
	 * @param stuNum 学号
	 * @return
	 */
	public Student searchStudentByNum(String stuNum) {
		Student stu = null;
		for (Student stu1 : mainStuList) {
			if (stu1.getStuNum().equals(stuNum)) {
				stu = stu1;
				break;
			}
		}
		return stu;
	}
	/**
	 * 登记学生语文成绩的方法
	 * 
	 * @param stuNum  学号
	 * @param chinese 语文成绩
	 */
	public void insertChineseScore(String stuNum, float chinese) {
		Student stu = searchStudentByNum(stuNum);
		if (stu == null) {
			System.out.println("没有找到学号为:" + stuNum + "的学生!");
		} else {
			stu.setChinese(chinese);
			System.out.println("该学生语文成绩登记成功!");
		}
	}
	/**
	 * 登记学生数学成绩的方法
	 * 
	 * @param stuNum 学号
	 * @param math   数学成绩
	 */
	public void insertMathScore(String stuNum, float math) {
		Student stu = searchStudentByNum(stuNum);
		if (stu == null) {
			System.out.println("没有找到学号为:" + stuNum + "的学生!");
		} else {
			stu.setMath(math);
			System.out.println("该学生数学成绩登记成功!");
		}
	}
	/**
	 * 删除学生信息的方法
	 * 
	 * @param stuNum 学号
	 */
	public void deleteStudent(String stuNum) {
		Student stu = searchStudentByNum(stuNum);
		if (stu != null) {
			mainStuList.remove(stu);
			System.out.println("该学生信息删除成功!");
		} else {
			System.out.println("没有找到学号为:" + stuNum + "的学生!");
		}
	}
	/**
	 * 显示所有学生信息的方法
	 */
	public void displayAllStudent() {
		System.out.println("班级" + this.getClassName() + "中的所有学生信息为:");
		for (Student stu : mainStuList) {
			System.out.println(stu);
		}
	}
	/**
	 * 获取班级语文平均
	 * 
	 * @return
	 */
	public float getAveChinese() {
		float sum = 0;
		int count = 0;
		float aveChinese = 0;
		for (int i = 0; i < mainStuList.size(); i++) {
			sum += mainStuList.get(i).getChinese();
			count++;
		}
		aveChinese = sum / count;
		return aveChinese;
	}
	/**
	 * 获取班级数学平均
	 * 
	 * @return
	 */
	public float getAveMath() {
		float sum = 0;
		int count = 0;
		float aveMath = 0;
		for (int i = 0; i < mainStuList.size(); i++) {
			sum += mainStuList.get(i).getMath();
			count++;
		}
		aveMath = sum / count;
		return aveMath;
	}
	@Override
	public String toString() {
		return "班级名称:" + className;
	}
}

School 类

package studentmanagement;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class School {
	Map<String, Banji> schoolListMap;
	public School() {
		schoolListMap = new HashMap<String, Banji>();
	}
	public Map<String, Banji> getSchoolListMap() {
		return schoolListMap;
	}
	public void setSchoolListMap(Map<String, Banji> schoolListMap) {
		this.schoolListMap = schoolListMap;
	}
	/**
	 * 添加班级
	 */
	public void addBanji(Banji banji) {
		schoolListMap.put(banji.getClassName(), banji);
	}
	/**
	 * 删除班级
	 */
	public void deleteBanji(Banji banji) {
		schoolListMap.remove(banji.getClassName());
		System.out.println("该班级删除成功!");
	}
	/**
	 * 通过班级名称查询班级
	 */
	public Banji searchByName(String className) {
		Banji banji = null;
		Set<String> banjiSet = schoolListMap.keySet();
		for (String s : banjiSet) {
			if (s.equals(className)) {
				banji = schoolListMap.get(s);
			}
		}
		return banji;
	}
	/**
	 * 对各班语文成绩按平均分进行由大到小排序
	 */
	public void sortChineseByAverage() {
		List<Banji> banjiChiList = new ArrayList<>();
		Collection<Banji> banji = schoolListMap.values();
		Iterator<Banji> it = banji.iterator();
		while (it.hasNext()) {
			banjiChiList.add(it.next());
		}
		banjiChiList.sort(new SortChinese());
		for (Banji bj : banjiChiList) {
			System.out.println(bj);
		}
	}
	/**
	 * 按照班级语文平均分排序内部类
	 */
	public class SortChinese implements Comparator<Banji> {
		@Override
		public int compare(Banji o1, Banji o2) {
			float score1 = o1.getAveChinese();
			float score2 = o2.getAveChinese();
			int n = (int) (score2 - score1);
			return n;
		}
	}
	/**
	 * 对各班数学成绩按平均分进行由大到小排序
	 */
	public void sortMathByAverage() {
		List<Banji> banjiMathList = new ArrayList<>();
		Collection<Banji> banji = schoolListMap.values();
		Iterator<Banji> it = banji.iterator();
		while (it.hasNext()) {
			banjiMathList.add(it.next());
		}
		banjiMathList.sort(new SortChinese());
		for (Banji bj : banjiMathList) {
			System.out.println(bj);
		}
	}
	/**
	 * 按照班级数学平均分排序内部类
	 */
	public class SortMath implements Comparator<Banji> {
		@Override
		public int compare(Banji o1, Banji o2) {
			float score1 = o1.getAveMath();
			float score2 = o2.getAveMath();
			int n = (int) (score2 - score1);
			return n;
		}
	}
	/**
	 * 显示所有班级名称
	 */
	public void displayBanJiName() {
		Set<String> banjiSet = schoolListMap.keySet();
		System.out.println("班级名称为:");
		for (String s : banjiSet) {
			System.out.println(s);
		}
	}
}


好帮手慕小尤 2020-06-24 18:59:36

同学你好,没有同学的全部代码,老师无法完成测试,建议同学参考排序思路:可先遍历所有的班级,得到学生的集合,计算学生的总成绩,除以学生数量就得到了平均成绩,然后将平均成绩和班级名称存入到map集合中,根据map集合中的数据,进行排序。参考代码如下所示:

http://img1.sycdn.imooc.com//climg/5ef33178097a2d4f08650824.jpg

注:同学可以反馈全部代码,便于老师定位问题。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快~

  • 提问者 Heijyu #1
    好的,我把别的代码也贴上来给老师查阅~
    2020-06-24 19:04:41
Heijyu 提问者 2020-06-24 18:26:02
	/**
	 * 获取班级语文平均
	 * 
	 * @return
	 */
	public float getAveChinese() {
		float sum = 0;
		int count = 0;
		float aveChinese = 0;
		for (int i = 0; i < mainStuList.size(); i++) {
			sum += mainStuList.get(i).getChinese();
			count++;
		}
		aveChinese = sum / count;
		return aveChinese;
	}


Heijyu 提问者 2020-06-24 18:24:33

关于方法和内部类

/**
	 * 对各班语文成绩按平均分进行由大到小排序
	 */
	public void sortChineseByAverage() {
		List<Banji> banjiChiList = new ArrayList<>();
		Collection<Banji> banji = schoolListMap.values();
		Iterator<Banji> it = banji.iterator();
		while(it.hasNext()) {
			banjiChiList.add(it.next());
		}
		banjiChiList.sort(new SortChinese());
		for(Banji bj:banjiChiList) {
			System.out.println(bj);
		}
	}
	
	/**
	 * 按照班级语文平均分排序内部类
	 */
	public class SortChinese implements Comparator<Banji> {

		@Override
		public int compare(Banji o1, Banji o2) {
			float score1 = o1.getAveChinese();
			float score2 = o2.getAveChinese();
			int n = (int) (score2 - score1);
			return n;
		}
	}

主流程代码:

/**
	 * 主流程
	 */
	public void test() {
		TestDemo td = new TestDemo();
		Scanner sc = new Scanner(System.in);
		String input;
		School school = new School();
		Banji mainBanji = new Banji("默认学生列表");
		school.addBanji(mainBanji);
		Banji norBanji = null;
		int count = 0;
		String strStuNum;
		String strStuName;
		Student stu;
		String bjName;
		boolean flag;
		while (true) {
			td.mainMenu();
			System.out.println("请输入相应的数字进行操作:");
			input = sc.next();
			if (input.equals("0")) {
				System.exit(0);
			}
			switch (input) {
			case "1":
				while (true) {
					td.banjiMenu();
					System.out.println("请输入相应的数字进行操作:");
					input = sc.next();
					if (input.equals("9")) {
						break;
					}
					switch (input) {
					case "1":// 添加学生到主学生列表
						System.out.println("**将学生信息添加到主学生列表**");
						System.out.println("请输入要添加的学生个数:");
						try {
							count = sc.nextInt();
						} catch (InputMismatchException e) {
							System.out.println("不能有非数字,请重新输入!");
							sc.nextInt();
						}
						for (int i = 1; i <= count; i++) {
							System.out.println("请输入第" + i + "个学生的学号:");
							strStuNum = sc.next();
							System.out.println("请输入第" + i + "个学生的姓名:");
							strStuName = sc.next();
							stu = new Student(strStuNum, strStuName);
							mainBanji.addStudent(stu);
							System.out.println("添加学生操作完成!");
						}
						break;
					case "2":// 添加学生到普通班级
						System.out.println("**将学生信息添加到普通班级列表**");
						System.out.println("请输入要添加学生的普通班级名称:");
						bjName = sc.next();
						norBanji = school.searchByName(bjName);
						if (norBanji == null) {
							System.out.println("该班级不存在,请先创建相应班级!");
							break;
						} else {
							System.out.println("请输入要添加的学生个数:");
							count = 0;
							try {
								count = sc.nextInt();
							} catch (InputMismatchException e) {
								System.out.println("不能有非数字,请重新输入!");
								sc.nextInt();
							}
							for (int i = 1; i <= count; i++) {
								System.out.println("请输入第" + i + "个学生的学号:");
								strStuNum = sc.next();
								stu = mainBanji.searchStudentByNum(strStuNum);
								Student stu1 = null;
								if (stu == null) {
									System.out.println("请输入第" + i + "个学生的姓名:");
									strStuName = sc.next();
									stu1 = new Student(strStuNum, strStuName);
									mainBanji.addStudent(stu1);
									norBanji.addStudent(stu1);
									System.out.println("添加学生操作完成!");
									mainBanji.displayAllStudent();
									norBanji.displayAllStudent();
								} else {
									norBanji.addStudent(stu);
									System.out.println("添加学生操作完成!");
									norBanji.displayAllStudent();
								}
							}
						}
						break;
					case "3":// 通过学号查询学生信息
						System.out.println("**通过学号查询学生信息**");
						System.out.println("请输入要查询学生的班级名称:");
						bjName = sc.next();
						norBanji = school.searchByName(bjName);
						if (norBanji == null) {
							System.out.println("该班级不存在!");
							break;
						} else {
							System.out.println("该班级存在!");
							System.out.println("请输入要查询学生的学号:");
							strStuNum = sc.next();
							// 如果学生不在普通班级列表,则查看是否在默认学生列表

							System.out.println("查询到的学生信息为:");
							System.out.println(norBanji.searchStudentByNum(strStuNum));
						}
						break;
					case "4":// 输入学生的语文成绩
						System.out.println("**输入学生的语文成绩**");
						System.out.println("请输入要登记语文成绩的学生的数量:");
						try {
							count = sc.nextInt();
						} catch (InputMismatchException e) {
							System.out.println("不能有非数字,请重新输入!");
						}
						for (int i = 0; i < count; i++) {
							System.out.println("请输入要登记语文成绩的学生的学号:");
							strStuNum = sc.next();
							stu = mainBanji.searchStudentByNum(strStuNum);
							if (stu == null) {
								System.out.println("该学生不存在!");
								break;
							} else {
								System.out.println("请输入第" + (i + 1) + "位学生的语文成绩:");
								float chiScore = 0;
								try {
									chiScore = sc.nextFloat();
								} catch (InputMismatchException e) {
									System.out.println("不能有非数字或格式不对的成绩,请重新输入!");
								}
								mainBanji.insertChineseScore(strStuNum, chiScore);
							}
						}
						break;
					case "5":// 输入学生的数学成绩
						System.out.println("**输入学生的数学成绩**");
						System.out.println("请输入要登记数学成绩的学生的数量:");
						try {
							count = sc.nextInt();
						} catch (InputMismatchException e) {
							System.out.println("不能有非数字,请重新输入!");
						}
						for (int i = 0; i < count; i++) {
							System.out.println("请输入要登记数学成绩的学生的学号:");
							strStuNum = sc.next();
							stu = mainBanji.searchStudentByNum(strStuNum);
							if (stu == null) {
								System.out.println("该学生不存在!");
								break;
							} else {
								System.out.println("请输入第" + (i + 1) + "位学生的数学成绩:");
								float mathScore = 0;
								try {
									mathScore = sc.nextFloat();
								} catch (InputMismatchException e) {
									System.out.println("不能有非数字或格式不对的成绩,请重新输入!");
								}
								mainBanji.insertChineseScore(strStuNum, mathScore);
							}
						}
						break;
					case "6":// 删除学生信息
						System.out.println("**删除学生信息**");
						System.out.println("请输入要删除的学生的所在班级名称:");
						bjName = sc.next();
						norBanji = school.searchByName(bjName);
						if (norBanji != null) {
							System.out.println("请输入要删除的学生的学号:");
							strStuNum = sc.next();
							stu = norBanji.searchStudentByNum(strStuNum);
							if (stu != null) {
								mainBanji.deleteStudent(strStuNum);
								norBanji.deleteStudent(strStuNum);
							} else {
								stu = mainBanji.searchStudentByNum(strStuNum);
								if (stu != null) {
									mainBanji.deleteStudent(strStuNum);
								}
							}
						} else {
							System.out.println("该班级不存在");
						}
						break;
					case "7":// 显示所有学生信息
						System.out.println("**显示所有学生信息**");
						flag = mainBanji.getStuList().isEmpty();
						if (flag == true) {
							System.out.println("列表为空,尚未添加学生信息!");
						} else {
							mainBanji.displayAllStudent();
						}
						break;

					default:
						System.out.println("该数字没有相应的操作!");
						break;
					}
				}
				break;
			case "2":
				while (true) {
					td.schoolMenu();
					System.out.println("请输入相应的数字进行操作:");
					input = sc.next();
					if (input.equals("9")) {
						break;
					}
					switch (input) {
					case "1":// 创建班级
						System.out.println("**创建班级**");
						System.out.println("请输入要创建的班级名称:");
						bjName = sc.next();
						norBanji = school.searchByName(bjName);
						if (norBanji == null) {
							norBanji = new Banji(bjName);
							school.addBanji(norBanji);
						} else {
							System.out.println("该班级已存在!");
						}
						break;
					case "2":// 删除班级
						System.out.println("**删除班级**");
						System.out.println("请输入要删除的班级名称:");
						bjName = sc.next();
						norBanji = school.searchByName(bjName);
						if (bjName.equals("默认学生列表")) {
							System.out.println("默认学生列表不能删除!");
							break;
						}
						if (norBanji != null) {
							school.deleteBanji(norBanji);
						} else {
							System.out.println("该班级不存在,不能删除!");
						}
						break;
					case "3":// 通过班级名称查询班级信息
						System.out.println("**通过班级名称查询班级信息**");
						System.out.println("请输入要查询的班级名称:");
						bjName = sc.next();
						norBanji = school.searchByName(bjName);
						if (norBanji == null) {
							System.out.println("该班级不存在!");
						} else {
							System.out.println("该班级存在,班级信息为:");
							norBanji.displayAllStudent();
						}
						break;
					case "4":// 对各班语文成绩按平均分由大到小排序
						System.out.println("排序前的班级列表为:");
						school.displayBanJiName();
						System.out.println("**对各班语文成绩按平均分由大到小排序**");
						school.sortChineseByAverage();
						break;
					case "5":// 对各班数学成绩按平均分由大到小排序
						System.out.println("**对各班数学成绩按平均分由大到小排序**");
						school.sortMathByAverage();
						break;
					case "6":// 显示所有班级名称
						System.out.println("**显示所有班级名称**");
						school.displayBanJiName();
						break;
					default:
						System.out.println("该数字没有相应的操作!");
						break;
					}
				}
				break;
			default:
				System.out.println("该数字没有相应的操作!");
				break;

			}
		}
	}


慕丝1539783 2020-06-24 00:26:31

顺便说一句,在排序前,最好还要做验证,比如学校里是否已经创建的班级?班级里是否有学生?学生是否已经添加成绩?只有都满足的情况下,才能排序。

  • 提问者 Heijyu #1
    大神,一般验证的信息是到test中再验证好,还是直接在方法里就写了好啊?看老师的演示感觉有的时候方法里也有验证的内容,可是test里也还有验证的内容哎
    2020-06-24 01:23:01
  • 慕丝1539783 回复 提问者 Heijyu #2
    这个根据实际情况,比如这个排序,不验证的,可以理解为单纯执行一个排序,可以提供给其他方法使用。但是如果没有其他方法需要调用排序,或者其他方法调用这个排序方法时也需要进行相同的验证,那索性就直接把验证内容也写在排序方法里。
    2020-06-24 08:51:35
  • 慕丝1539783 回复 提问者 Heijyu #3
    还有,别叫我大神,我也只是个编程界的小学生。
    2020-06-24 08:55:00
慕丝1539783 2020-06-24 00:16:59

就是存到所有班级对象的列表,很多地方可以取值。比如题目要求的school类的属性schoolMap,就是存放的班级对象,元素取出来放到班级list就行了。

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师