老师来康康,有点问题
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;
}
//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=new ArrayList<Student>();//存放学生的集合
int cNum=0;
float cSum=0;
int mNum=0;
float mSum=0;
//构造方法
public Banji() {
super();
//stuList=new ArrayList<Student>();
// 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);
System.out.println("添加成功");
}
}
/**
* 通过学号查询学生在班级中是否存在,存在返回学生信息,不存在返回null
* @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;
}
/**
* 通过姓名查询学生在班级中是否存在,存在返回学生信息,不存在返回null
* @param stuNum 传入学生的学号
* @return 返回学生信息
*/
public Student searchStudentByName(String stuName) {
Student student = null;
//学号是唯一的
for(Student student1:stuList) {
if(student1.getStuName().equals(stuName)) {
student=student1;
break;
}
}
return student;
}
List<Float> chineseScoreList=new ArrayList<Float>();
/**
* 添加学生的语文成绩到对应学号
* @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++;
chineseScoreList.add(score);
}else {
System.out.println("没有学号为"+stuNum+"的学生,请重新输入");
}
}
/**
* 获取班级语文平均
* @return
*/
public float getAvgChinese(){
float avgChinese=0,totChinese=0;
for(int i=0;i<chineseScoreList.size();i++) {
totChinese=totChinese+chineseScoreList.get(i);
}
avgChinese=totChinese/chineseScoreList.size();
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=0;
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(){
if(stuList.isEmpty()) {
System.out.println("还未添加学生信息,请先添加");
}else {
System.out.println("班级里所有学生的信息:");
for(Student student:stuList) {
System.out.println(student);
}
}
}
}
============================================================
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
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) {
//将schoolMap的key值存放进Set集合s中
Set<String>s=schoolMap.keySet();
//判断s集合中是否有重复班级名
if(s.contains(banji.getClassName())){
System.out.println(banji.getClassName()+"已存在,添加失败");
}else{
schoolMap.put(banji.getClassName(), banji);
System.out.println(banji.getClassName()+"添加成功");
}
}
/**
* 删除班级
* @param banji
*/
public void deleteBanji(Banji banji) {
//判断schoolMap中是否有输入班级名称信息,如果有,删除
if(banji==null) {
System.out.println("未找到班级信息");
}
if(schoolMap.keySet().contains(banji.getClassName())){
schoolMap.remove(banji.getClassName());
System.out.println("删除成功!");
}else{
System.out.println("未找到班级信息");
}
}
/**
* 通过班级名称查询班级
* @param className
* @return
*/
public Banji searchByName(String className) {
Banji banji =null;
Set<String> keySet=schoolMap.keySet();
for(String s:keySet){
if(s.equals(className)){
banji=schoolMap.get(s);break;
}
}
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("所有的班级名称为:");
//所有key值存放到s,遍历输出
Set<String>s=schoolMap.keySet();
for(String ss:s){
System.out.println(ss);
}
}
}
============================================================
import java.util.List;
import java.util.Scanner;
import java.lang.NullPointerException;
public class TestDemo {
// 班级的测试方法
public void testBanJi() {
School school = new School();
// banJiMenu();
// 创建学生对象
System.out.println("**创建学生对象**");
Student student1 = new Student("s001", "mmm");
Student student2 = new Student("s002", "www");
Student student3 = new Student("s002", "www");
Student student4 = new Student("s003", "www");
Banji banji1 = new Banji("b01", "一班");
Banji banji2 = new Banji("b02", "二班");
// 实例化创建主学生列表
System.out.println("**实例化创建主学生列表**");
Banji mainBanji = new Banji("0", "主学生列表");
school.addBanji(mainBanji);
// 添加学生到主学生列表
System.out.println("**添加学生到主学生列表**");
mainBanji.addStudent(student1);
mainBanji.addStudent(student2);
mainBanji.addStudent(student4);
// 添加重复学生到主学生列表
System.out.println("**添加重复学生到主学生列表**");
mainBanji.addStudent(student3);
// 显示学生信息
System.out.println("**显示学生信息**");
mainBanji.displayAllStudent();
// 通过学号查询学生在班级中是否存在
System.out.println("**通过学号查询学生在班级中是否存在**");
System.out.println(mainBanji.searchStudentByNum("s002"));
System.out.println(mainBanji.searchStudentByNum("s003"));
// 添加学生的语文成绩到对应学号
System.out.println("**添加学生的语文成绩到对应学号**");
mainBanji.insertChineseScore("s001", 100);
mainBanji.insertChineseScore("s002", 90);
mainBanji.insertChineseScore("s003", 90);
mainBanji.insertChineseScore("s004", 90);
mainBanji.displayAllStudent();
// 添加学生的数学成绩到对应学号
System.out.println("**添加学生的数学成绩到对应学号**");
banji1.insertMathScore("s001", 90);
banji2.insertMathScore("s002", 100);
mainBanji.insertMathScore("s003", 90);
mainBanji.insertMathScore("s004", 90);
mainBanji.displayAllStudent();
// 删除学生信息
System.out.println("**删除学生信息**");
mainBanji.deleteStudent("s003");
mainBanji.displayAllStudent();
// 向1班添加学生
System.out.println("**向1班添加学生**");
banji1.displayAllStudent();
// System.out.println(mainBanji.getStuList().get(0));
banji1.addStudent((Student) mainBanji.getStuList().get(0));
banji1.displayAllStudent();
// 向2班添加学生
System.out.println("**向2班添加学生**");
banji2.displayAllStudent();
// System.out.println(mainBanji.getStuList().get(0));
banji2.addStudent(student2);
banji2.displayAllStudent();
// 对各班语文成绩按平均分进行由大到小排序
System.out.println("**对各班语文成绩按平均分进行由大到小排序**");
school.sortChineseByAverage();
System.out.println(mainBanji.getAvgChinese());
System.out.println(" 5--对各班数学成绩按平均分进行由大到小排序");
school.sortMathByAverage();
school.displayBanJiName();
}
// 学校的测试方法
public void testSchool() {
System.out.println("**实例化school**");
School school = new School();
System.out.println("**实例化班级**");
Banji banji1 = new Banji("b01", "一班");
Banji banji2 = new Banji("b02", "二班");
Banji banji3 = new Banji("b03", "三班");
Banji banji4 = new Banji("b03", "三班");
Banji banji5 = new Banji("b02", "五班");
System.out.println("**添加班级到school**");
school.addBanji(banji1);
school.addBanji(banji2);
school.addBanji(banji3);
school.addBanji(banji4);
// school.addBanji(banji5);
System.out.println("**显示所有添加成功的班级信息**");
school.displayBanJiName();
System.out.println("**测试查询方法**");
System.out.println("查询方法测试" + school.searchByName("一班"));
System.out.println("查询方法测试" + school.searchByName("二班"));
if (school.searchByName("四班") == null) {
System.out.println("未找到");
} else {
System.out.println(school.searchByName("四班"));
}
System.out.println("**测试删除方法(输入班级名称删除对应班级信息)**");
school.deleteBanji(banji1);
school.deleteBanji(banji5);
System.out.println("**显示删除后的班级信息**");
school.displayBanJiName();
}
// 主菜单
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 school = new School();
Banji mainBanji = new Banji("0", "主学生列表");
Banji banji =null;
while (true) {
td.mainMenu();
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);
mainBanji.addStudent(student);
// System.out.println("添加成功");
i++;
}
System.out.println("主学生列表的学生信息为:");
mainBanji.displayAllStudent();
break;
case 2:
System.out.println("添加学生信息到普通班级");
System.out.println("请输入要添加的班级名称");
String className = sc.next();
banji = school.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 stuId = sc.next();
// 判断id在主班级存不存在
Student student = mainBanji.searchStudentByNum(stuId);
if (student == null) {
System.out.println("该学生信息在主学生列表中不存在,请输入学生的其他信息");
System.out.println("请输入要添加的学生姓名");
String stuName = sc.next();
Student student1 = new Student(stuId, stuName);
mainBanji.addStudent(student1);
banji.addStudent(student1);
} else {
banji.addStudent(student);
}
}
System.out.println("主学生列表:");
mainBanji.displayAllStudent();
System.out.println(banji.getClassName() + "班级列表");
banji.displayAllStudent();
}
break;
case 3:
System.out.println("通过学号查询学生信息");
System.out.println("请输入班级的名称");
String cName = sc.next();
Banji b = school.searchByName(cName);
if (b == null) {
System.out.println("该班级不存在");
} else {
System.out.println("请输入要查询的学生Id");
String sId = sc.next();
if (b.searchStudentByNum(sId) == null) {
System.out.println("该学生信息在" + cName + "不存在");
} else {
System.out.println("学生信息:【学号:" + b.searchStudentByNum(sId).getStuNum() + ",姓名:"
+ b.searchStudentByNum(sId).getStuName() + "】");
}
}
break;
case 4:
System.out.println("输入班级的语文成绩");
System.out.println("请输入班级的名称");
String cName4 = sc.next();
Banji b4 = school.searchByName(cName4);
try {
List<Student> stuList = b4.getStuList();
if (stuList.isEmpty()) {
System.out.println("还未添加学生信息");
} else {
for (Student s : stuList) {
System.out.println("学生id:" + s.getStuNum() + ",学生姓名:" + s.getStuName());
System.out.println("请输入学生语文成绩:");
float f = sc.nextFloat();
banji.insertChineseScore(s.getStuNum(), f);
}
}
} catch (NullPointerException e) {
System.out.println("该班级不存在");
}
break;
case 5:
System.out.println("输入班级的数学成绩");
System.out.println("输入班级的数学成绩");
System.out.println("请输入班级的名称");
String cName5 = sc.next();
Banji b5 = school.searchByName(cName5);
try {
List<Student> stuList1 = b5.getStuList();
if (stuList1.isEmpty()) {
System.out.println("还未添加学生信息");
} else {
for (Student s : stuList1) {
System.out.println("学生id:" + s.getStuNum() + ",学生姓名:" + s.getStuName());
System.out.println("请输入学生数学成绩:");
float f = sc.nextFloat();
banji.insertMathScore(s.getStuNum(), f);
}
}
} catch (NullPointerException e) {
System.out.println("该班级不存在");
}
break;
case 6:
System.out.println("删除学生信息");
System.out.println("请输入班级的名称");
String cName6 = sc.next();
Banji b6 = school.searchByName(cName6);
if (b6 == null) {
System.out.println("该班级不存在");
} else {
System.out.println("请输入学生id:");
String sc6 = sc.next();
if (b6.searchStudentByNum(sc6) == null) {
System.out.println("没有找到id:" + sc6 + "的学生信息");
} else {
banji.deleteStudent(sc6);
System.out.println("删除成功");
}
}
break;
case 7:
System.out.println("显示所有学生信息");
System.out.println("请输入班级的名称");
String cName1 = sc.next();
Banji b1 = school.searchByName(cName1);
if (b1 == null) {
System.out.println("该班级不存在");
} else {
b1.displayAllStudent();
}
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();
//banji = new Banji(classNum, className);
//Student addStudent=new Student();
school.addBanji(new Banji(classNum, className));
//school.addBanji(new Banji(classNum, className));
break;
case 2:
System.out.println("删除班级");
System.out.println("请输入班级名称");
String deleteName = sc.next();
if (school.searchByName(deleteName) == null) {
System.out.println("该班级不存在");
} else {
school.deleteBanji(school.searchByName(deleteName));
}
break;
case 3:
System.out.println("通过班级名称查询班级信息");
System.out.println("请输入班级名称");
String searchName = sc.next();
if (school.searchByName(searchName) == null) {
System.out.println("该班级不存在");
} else {
System.out.println("班级信息: [班级编号:" + school.searchByName(searchName).getClassId() + ",班级名称 "
+ school.searchByName(searchName).getClassName() + "]");
}
break;
case 4:
if (school.getSchoolMap().keySet().isEmpty()) {
System.out.println("还未创建班级");
} else {
System.out.println("对各班语文成绩按平均分进行由大到小排序");
school.sortChineseByAverage();
}
break;
case 5:
if (school.getSchoolMap().keySet().isEmpty()) {
System.out.println("还未创建班级");
} else {
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();
// td.testSchool();
// td.testBanJi();
}
}
老师我这个运行以后,从主学生列表添加信息到普通班级,添加一班后给二班添加成绩就会有问题,
添加二班学生后,给一班添加成绩就会有问题,。这是哪里出错了啊?还有就是我在eclipse上运行
测试代码的时候,输入中文老是会出问题,有办法解决不?是因为我输入法的问题吗?58
收起
正在回答 回答被采纳积分+1
4回答
慕丝1539783
2020-07-08 08:56:34
case 4:
System.out.println("输入班级的语文成绩");
System.out.println("请输入班级的名称");
String cName4 = sc.next();
Banji b4 = school.searchByName(cName4);
try {
List<Student> stuList = b4.getStuList();
if (stuList.isEmpty()) {
System.out.println("还未添加学生信息");
} else {
for (Student s : stuList) {
System.out.println("学生id:" + s.getStuNum() + ",学生姓名:" + s.getStuName());
System.out.println("请输入学生语文成绩:");
float f = sc.nextFloat();
banji.insertChineseScore(s.getStuNum(), f);
}
}
} catch (NullPointerException e) {
System.out.println("该班级不存在");
}
break;根据输入班级名称获得了查询到的班级"b4"
Banji b4 = school.searchByName(cName4);
最后添加成绩的时候,又用的是"banji"?
banji.insertChineseScore(s.getStuNum(), f);
这边的"banji"应该是你其他case用到的,所以会显示学生不存在
改成
b4.insertChineseScore(s.getStuNum(), f);
java工程师2020版
- 参与学习 人
- 提交作业 9410 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程

















恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星