不行了,老师来帮忙捋捋呗

不行了,老师来帮忙捋捋呗

public class Student {
	//属性
	private String stuNum,stuName;
	private float math,chinese;
	//构造方法
	public Student() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Student(String stuNum, String stuName) {
		super();
		this.stuNum = stuNum;
		this.stuName = stuName;
		this.math = math;
		this.chinese = chinese;
	}
	//getter和setter方法
	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;
	}
	//hashCode方法
	@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;
	}
	//equals方法
	@Override
	public boolean equals(Object obj) {
		//判断对象是否相等
		if (this == obj)
			return true;
		//this!=obj时
		if(obj.getClass()==Student.class) {
			Student student=(Student)obj;
			return (student.getStuNum().equals(stuNum)&&student.getStuName().equals(stuName)&&(student.getMath()==math)&&(student.getChinese()==chinese));
		}
		return false;
		
		
	}
	//toString方法
	@Override
	public String toString() {
		return "学生信息:[学号:" + stuNum + ",姓名:" + stuName + ",数学成绩:" + math + ",语文成绩:" + chinese + "]";
	}
}
============================================================
import java.util.ArrayList;
import java.util.List;

public class Banji{
	//属性
	private String classId,className;//班级id,班级名称
	private List<Student> stuList;//存放学生的集合
	int cNum=0;
	float cSum=0;
	int mNum=0;
	float mSum=0;
	
	//构造方法
	public Banji() {
		super();
		// TODO Auto-generated constructor stub
	}
	public Banji(String classId, String className) {
		super();
		this.setClassId(classId);
		this.setClassName(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 getStuList() {
		return stuList;
	}
	public void setStuList(List stuList) {
		this.stuList = stuList;
	}
	/**
	 * 将学生添加到班级
	 * @param stu 要添加的学生信息
	 */
	public void addStudent(Student stu) {
		boolean flag=false;//判断班级中的学生是否存在
		for(Student s:stuList) {
			if(s.equals(stu)) {
				flag=true;
				break;
			}
		}
		if(flag) {
			System.out.println("该学生信息已添加");
		}else {
			stuList.add(stu);
		}
	}
	/**
	 * 通过学号查询学生在班级中是否存在
	 * @param stuNum 传入学生的学号
	 * @return 返回学生信息
	 */
	public Student searchStudentByNum(String stuNum) {
		Student student = null;
		//学号是唯一的
		for(Student student1:stuList) {
			if(student1.getStuNum().equals(stuNum)) {
				student=student1;
				break;
			}
		}
		return student;
	}
	/**
	 * 输入班级学生的语文成绩
	 * @param stuNum 学生学号
	 * @param score 语文成绩
	 */
	public void insertChineseScore(String stuNum,float score){
		Student student=searchStudentByNum(stuNum);
		if(student!=null) {
			student.setChinese(score);
			System.out.println("添加成功");
			cNum++;
			cSum+=score;
		}else {
			System.out.println("没有学号为"+stuNum+"的学生,请重新输入");
		}	
	}
	/**
	 * 获取班级语文平均
	 * @return
	 */
	public float getAvgChinese(){
		float avgChinese=cSum/cNum;
		return avgChinese;
	} 
	/**
	 * 输入班级学生的数学成绩
	 * @param stuNum 学生学号
	 * @param score 数学成绩
	 */
	public void insertMathScore(String stuNum,float score){
		Student student=searchStudentByNum(stuNum);
		if(student!=null) {
			student.setMath(score);
			System.out.println("添加成功");
			mNum++;
			mSum+=score;
		}else {
			System.out.println("没有学号为"+stuNum+"的学生,请重新输入");
		}
	}
	/**
	 * 获取班级数学平均
	 * @return
	 */
	public float getAvgMath(){
		float avgMath=mSum/mNum;
		return avgMath;
	} 
	/**
	 *  删除学生信息
	 * @param stuNum 传入要删除信息的学号
	 */
	public void deleteStudent(String stuNum){
		Student student=searchStudentByNum(stuNum);
		if(student!=null) {
			stuList.remove(student);
		}else {
			System.out.println("没有学号为"+stuNum+"的学生,请重新输入");
		}
	}
	/**
	 * 显示所有学生的信息(包括学号和姓名)
	 */
	public void displayAllStudent(){
		System.out.println("班级里所有学生的信息:");
		for(Student student:stuList) {
			System.out.println(student);
		}
		
	}
}
============================================================
import java.util.ArrayList;
import java.util.Collection;
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.Scanner;
import java.util.Set;
import java.util.TreeMap;

public class School {
	// 属性
	private Map<String, Banji> schoolMap;
	// 构造方法

	public School() {
		super();
		schoolMap = new HashMap<String, Banji>();
		// TODO Auto-generated constructor stub
	}

	public School(Map<String, Banji> schoolMap) {
		super();
		this.schoolMap = schoolMap;
		schoolMap = new HashMap<String, Banji>();
	}

	// getter和setter方法
	public Map getSchoolMap() {
		return schoolMap;
	}

	public void setSchoolMap(Map schoolMap) {
		this.schoolMap = schoolMap;
	}

	/**
	 * 添加班级
	 * 
	 * @param banji
	 */
	public void addBanji(Banji banji) {
		//Scanner sc = new Scanner(System.in);
		//System.out.println("请输入班级编号:");
		//banji.setClassId(sc.next());
		//this.banji.s
		//banji.setClassName(className);
		schoolMap.put(banji.getClassId(), banji);
		System.out.println("添加成功");
	}

	/**
	 * 删除班级
	 * 
	 * @param banji
	 */
	public void deleteBanji(Banji banji) {
//		Iterator<String> it = schoolMap.keySet().iterator();
//		while (it.hasNext()) {
//			if (it.next().equals(banji.getClassName())) {
//				System.out.println("删除" + banji.getClassName()+"成功");
//				it.remove();
//			}
//		}
		//Banji banji = null;
		if(banji==null) {
			System.out.println("该班级不存在");
		}else {
			Set<Entry<String, Banji>> entrySet = schoolMap.entrySet();
			Iterator<Entry<String, Banji>> it = entrySet.iterator();
			while (it.hasNext()) {
				Entry<String, Banji> entry = it.next();
				if (entry.getValue().getClassName().equals(banji.getClassName())) {
					//System.out.println("班级信息:  [班级编号:" + entry.getKey() + ",班级名称 " + entry.getValue().getClassName() + "]");
					it.remove();
					System.out.println("删除成功");
				}
			}
		}
		
	}

	/**
	 * 通过班级名称查询班级
	 * 
	 * @param className
	 * @return
	 */
	public Banji searchByName(String className) {
		Banji banji = null;
		Set<Entry<String, Banji>> entrySet = schoolMap.entrySet();
		Iterator<Entry<String, Banji>> it = entrySet.iterator();
		while (it.hasNext()) {
			Entry<String, Banji> entry = it.next();
			if (entry.getValue().getClassName().equals(className)) {
				//System.out.println("班级信息:  [班级编号:" + entry.getKey() + ",班级名称 " + entry.getValue().getClassName() + "]");
				return entry.getValue();
			}
		}
		return banji;
	}

	/**
	 * 对各班语文成绩按平均分进行由大到小排序
	 */
	public void sortChineseByAverage() {
		Set<String> stuListSet = schoolMap.keySet();
		Map<String, Banji> map = new TreeMap<String, Banji>();
		for (String s : stuListSet) {
			schoolMap.get(s).getAvgChinese();
			map.put(s, schoolMap.get(s));
			map.remove("主学生列表");
		}
		// 这里将map.entrySet()转换成list
		List<Map.Entry<String, Banji>> list = new ArrayList<Map.Entry<String, Banji>>(map.entrySet());
		// 然后通过比较器来实现排序
		Collections.sort(list, new Comparator<Map.Entry<String, Banji>>() {
			@Override
			public int compare(Entry<String, Banji> o1, Entry<String, Banji> o2) {
				// TODO Auto-generated method stub
				float chinese1 = o1.getValue().getAvgChinese();
				float chinese2 = o2.getValue().getAvgChinese();
				int n = (int) (chinese2 - chinese1);
				return n;
			}
		});
		if(stuListSet==null) {
			System.out.println("还未添加");
		}else {
			System.out.println("语文平均成绩由大到小的排序为:");
			for (Entry<String, Banji> mapping : list) {
					System.out.println(mapping.getValue().getClassName() + "的平均分:" + mapping.getValue().getAvgChinese());			
			}
		}
			
		
	}

	/**
	 * 对各班数学成绩按平均分进行由大到小排序
	 */
	public void sortMathByAverage() {
		Set<String> stuListSet = schoolMap.keySet();

		Map<String, Banji> map = new TreeMap<String, Banji>();
		for (String s : stuListSet) {
			schoolMap.get(s).getAvgMath();
			map.put(s, schoolMap.get(s));
			map.remove("主学生列表");
		}
		// 这里将map.entrySet()转换成list
		List<Map.Entry<String, Banji>> list = new ArrayList<Map.Entry<String, Banji>>(map.entrySet());
		// 然后通过比较器来实现排序
		Collections.sort(list, new Comparator<Map.Entry<String, Banji>>() {
			@Override
			public int compare(Entry<String, Banji> o1, Entry<String, Banji> o2) {
				// TODO Auto-generated method stub
				float math1 = o1.getValue().getAvgMath();
				float math2 = o2.getValue().getAvgMath();
				int n = (int) (math2 - math1);
				return n;
			}
		});
		System.out.println("数学平均成绩由大到小的排序为:");
		for (Entry<String, Banji> mapping : list) {
			System.out.println(mapping.getValue().getClassName() + "的平均分:" + mapping.getValue().getAvgMath());
		}
	}

	/**
	 * 显示所有班级名称
	 */
	public void displayBanJiName() {
		System.out.println("所有的班级名称为:");
//		Set<Entry<String,Banji>> entrySet=schoolMap.entrySet();
//		Iterator<Banji> it=schoolMap.values().iterator();
		Set<Entry<String, Banji>> entrySet = schoolMap.entrySet();
		Iterator<Entry<String, Banji>> it = entrySet.iterator();
		while (it.hasNext()) {
			Entry<String, Banji> entry = it.next();
			System.out.println(entry.getValue().getClassName());
		}
	}

}
============================================================
import java.util.Scanner;

public class TestDemo {

	// 班级的测试方法
	public void testBanJi() {

	}

	// 学校的测试方法
	public void testSchool() {
	}
	// 主菜单
	public void mainMenu() {
		System.out.println("****************************");
		System.out.println("	**主菜单**");
		System.out.println("	1--班级管理");
		System.out.println("	2--学校管理");
		System.out.println("	0--退出");
		System.out.println("****************************");
		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("********************************************************");
		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("********************************************************");
		System.out.println("请输入对应数字进行班级列表管理");
	}

	// 主流程:
	public void test() {
		TestDemo td = new TestDemo();
		Scanner sc = new Scanner(System.in);
		int input = 0, input1 = 0, input2 = 0;
		School school1=new School();
		Banji banji1=new Banji();
		Banji banji=null;
		school1.addBanji(banji1);
		while (true) {
			td.mainMenu();
			System.out.println("请输入数字");
			input = sc.nextInt();
			if (input == 0) {
				break;
			}
			switch (input) {
			case 1:
				//班级管理
				while (true) {
					banJiMenu();
					input1 = sc.nextInt();
					if(input1==9) {
						break;
					}
					switch (input1) {
					case 1:
						int i = 1;
						System.out.println("添加学生信息到主学生列表");
						System.out.println("请输入要添加的学生信息个数:");
						int stuNum = sc.nextInt();
						while (i <= stuNum) {
							System.out.println("请输入第" + i + "个学生信息");
							System.out.println("请输入学生id:");
							String stuId = sc.next();
							System.out.println("请输入学生姓名:");
							String stuName = sc.next();
							Student student=new Student(stuId, stuName);
							banji1.addStudent(student);
							System.out.println("添加成功");			
							i++;
						}
						banji1.displayAllStudent();
						break;
					case 2:
						System.out.println("添加学生信息到普通班级");
						System.out.println("请输入要添加的班级名称");
						String className=sc.next();
						banji=school1.searchByName(className);
						if(banji==null) {
							System.out.println("班级不存在,请先添加班级信息");
						}else {
							System.out.println("请输入要添加学生个数");
							int count1=sc.nextInt();
							for(int i1=1;i1<=count1;i1++) {
								System.out.println("请输入第"+i1+"个学生信息");
								System.out.println("请输入要添加的学生id:");
								String strId=sc.next();
								//判断id在主班级存不存在
								Student student=banji.searchStudentByNum(strId);
								if(student==null) {
									System.out.println("不存在,继续输入");
									
								}else {
									banji.addStudent(student);
								}
							}
							banji.displayAllStudent();
						}
						break;
					case 3:
						System.out.println("通过学号查询学生信息");
						break;
					case 4:
						System.out.println("输入班级的语文成绩");
						break;
					case 5:
						System.out.println("输入班级的数学成绩");
						break;
					case 6:
						System.out.println("删除学生信息");
						break;
					case 7:
						System.out.println("显示所有学生信息");
						break;
					default:
						System.out.println("没有对应的操作");
						break;
					}
				
				}
				break;
			case 2:
				//学校管理
				while (true) {
					schoolMenu();
					input2 = sc.nextInt();
					if(input2==9) {
						break;
					}
					switch (input2) {
					case 1:
						System.out.println("创建班级");
						System.out.println("请输入班级编号:");
						String classNum = sc.next();
						System.out.println("请输入班级名称:");
						String className = sc.next();
						banji1 = new Banji(classNum, className);
						school1.addBanji(banji1);
						break;
					case 2:
						System.out.println("删除班级");
						System.out.println("请输入班级名称");
						String deleteName = sc.next();
						school1.deleteBanji(school1.searchByName(deleteName));
						break;
					case 3:
						System.out.println("通过班级名称查询班级信息");
						System.out.println("请输入班级名称");
						String searchName = sc.next();
						if (school1.searchByName(searchName) == null) {
							System.out.println("找不到该班级");
						} else {
							System.out.println("班级信息:  [班级编号:" + school1.searchByName(searchName).getClassId() + ",班级名称 "
									+ school1.searchByName(searchName).getClassName() + "]");
						}
						break;
					case 4:
						System.out.println("对各班语文成绩按平均分进行由大到小排序");
						school1.sortChineseByAverage();
						break;
					case 5:
						System.out.println("对各班数学成绩按平均分进行由大到小排序");
						school1.sortMathByAverage();
						break;
					case 6:
						System.out.println("显示所有班级名称");
						school1.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();
	}

}

做了一天做晕了,老师帮忙捋捋呗,感觉我咋越做越复杂,然后那个学生列表和普通班级是啥意思也没太搞懂

正在回答 回答被采纳积分+1

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

3回答
好帮手慕阿莹 2020-07-08 11:32:13

同学你好,

存放到这个班级的stuList 集合中就可以。

主班级的学生列表存放在主班级对象(也就是同学的banji1)的这个list集合中

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

普通班级的学生列表就存放在普通班级对象的list集合中即可。

普通班级和主班级都存放在School类中的schoolMap中。

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

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

慕设计7678942 2020-07-06 11:20:19

主学生列表可以想象成一个学校,所有的学生都在学校里,为了方便管理学生信息,要把学校里的学生分成若干个班级好进行管理,学校就可以把学生分到一班,二班,三班等等。此时的一班,二班,三班就是普通班级学生列表。 学生在主学生列表中可以说我是xx学校的学生,当学生在xx班级里时,学生可以说我在xx学校的xx年级xx班级。

好帮手慕阿莹 2020-07-06 11:00:40

首先给同学解释一下主学生列表,以及普通班级列表的关系

主学生列表就好比是全校学生的一个集合

而普通班级列表就好比是一个一个的班级学生的集合。

普通班级列表添加的时候,先从主播放列表中根据学生的id查询是否有这个学生

如果有,则直接添加到普通班级中,

如果没有,则继续输入学生姓名,创建新的学生,添加到普通班级中,并添加到主播放列表中。

总结一下就是:普通班级列表添加的时候,就是从主播放列表中添加的,如果主播放列表中没有,则继续补充完这个学生的信息,同时放到普通班级及主班级

下面我们来说一下同学的代码:

1、同学的代码启动后就是添加成功

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

修改建议:

添加主班级的时候,可以不用输出这个添加成功。

 

2、使用主班级集合之前,先判断一下是否有学生,如果有,再用,如果没有,提示主班级还未添加学生。(其他的同理)

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

3、

向主班级添加的时候,报空指针异常:

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

修改建议:这个集合属性可以先初始化一下。

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

4、添加到普通班级列表中时也是:

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

修改建议:

添加主班级的时候,应该给这个班级写上班级id和名称

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

否则根据名称查询班级的时候,它会挨个遍历,这个时候就会遍历到同学一开始添加的这个banji1 ,名称和编号都为null; 再去调用方式比较名称时,就会是null。

5

建议不要把普通班级提取出来,因为普通班级不是一个,例如,一年级,二年级都是普通班级,我们不应该用一个对象来表示。

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

可以改成这种局部变量(其他的同理,同学也修改一下):

 

创建班级的时候也是应该new一个新的班级,之前的banji1就让它代表主班级,不要再把其他班级赋值给它

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

 

同学可以先再看一下播放器案例的逻辑,这个和播放器列表的逻辑是一样的,先理顺了逻辑,再写代码就会比较顺利了哦。

另外,同学要注意代码命名规范等,例如班级 应该写做BanJi 

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

  • 提问者 对方正在说话 #1
    老师,我这普通班级和主学生列表分别要存放在哪里呢?
    2020-07-08 10:27:47
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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