老师我这个数学和语文的平均成绩是没有调用出来还是我在bj中的代码写错了呢
package com.imooc.one;
public class Student {
private String stuNum;//学号
private String stuName;//姓名
private float math;//数学成绩
private float chinese;//语文成绩
//无参构造方法
public Student() {
}
//带参构造方法
public Student(String stuNum,String stuName) {
this.stuNum=stuNum;
this.stuName=stuName;
}
//创建setter和getter方法
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) {
//判断对象是否相等,相等则直接返回true
if(this==obj)
return true;
//this!=obj
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 "学生信息: [学号:" + stuNum + ", 姓名:" + stuName + "]";
}
}
package com.imooc.one;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class School {
Map<String,BanJi>schoolMap;//存放班级里列表集合
//构造方法
public School() {
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) {
//班级名称作为key值
schoolMap.put(banji.getClassName(), banji);
}
/**
* 删除班级
* @param banji 要删除的班级
*/
public void deleteBanJi(BanJi banji) {
schoolMap.remove(banji.getClassName());
System.out.println("删除成功!");
}
/**
* 通过班级名称查询班级
* @param className 要查询的班级名称
* @return 查询到班级
*/
public BanJi searchBanJiByName(String className) {
BanJi banji=null;
Set<String> banjiSet=schoolMap.keySet();
for(String s:banjiSet) {
if(s.equals(className)) {
banji=schoolMap.get(s);
break;
}
}
return banji;
}
/**
* 展示所有的班级
*/
public void displayBanJiName() {
System.out.println("所有班级名称为: ");
Set<String> banJiSet = schoolMap.keySet();
for (String s : banJiSet) {
if (s.equals("主学生列表")) {
continue;
} else {
System.out.println(s);
}
}
}
public List<BanJi> getBanJiList(){
List<BanJi> banjiList=new ArrayList<>();
for(BanJi banji:schoolMap.values()) {
if(banji.getClassName().equals("主学生列表")) {
continue;
}else {
banjiList.add(banji);
}
}
return banjiList;
}
}
package com.imooc.one;
import java.util.ArrayList;
import java.util.List;
public class BanJi {
private String classId;// 班级编号
private String className;// 班级名称
private List<Student> stuList;// 存放学生的集合
/**
* 构造方法
*
* @param classId 班级编号
* @param className 班级名称
*/
//无参构造方法
public BanJi() {
}
//带参构造方法
public BanJi(String classId, String className) {
this.classId = classId;
this.className = className;
stuList = new ArrayList<Student>();
}
// 创建setter和getter方法
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;
}
// 将学生添加到班级
public void addStudent(Student stu) {
// 要排除重复添加的情况
boolean flag = false;// 判断班级中的学生是否存在
for (Student stu1 : stuList) {
if (stu1.equals(stu)) {
flag = true;
break;
}
}
if (flag) {
System.out.println("该学生已经存在于班级中,添加失败!");
} else {
stuList.add(stu);
}
}
/**
* 通过学号查询学生在班级中是否存在
*
* @param stuNum 学号
* @return 查询到学号的信息
*/
public Student searchStudentByNum(String stuNum) {
Student stu = null;
for (Student stu1 : stuList) {
if (stu1.getStuNum().equals(stuNum)) {
// 如果相等就找到了
stu = stu1;
break;
}
}
return stu;
}
List<Float> chineseScoreList = new ArrayList<Float>();
/**
* 输入班级学生的语文成绩
*
* @param stuNum 要输入语文成绩的学生
* @param score 要输入的语文成绩 :通过对输入的学生学号遍历存放学生的集合,找出与用户输入学号一直的学生
* 然后利用遍历出来的学生通过set方法进行插入成绩
*/
public void insertChineseScore(String stuNum, float score) {
// 根据stuNum查询到相关的学生,然后进行修改
Student stu = searchStudentByNum(stuNum);
if (stu == null) {
System.out.println("没有找到学号为" + stuNum + "对应的学生");
} else {
stu.setChinese(score);
chineseScoreList.add(score);
System.out.print(stu);
System.out.println(",语文成绩:" + stu.getChinese());
}
}
/**
*
* 获取班级平均成绩
*
* @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;
}
List<Float> mathScoreList = new ArrayList<Float>();
/**
* 输入班级学生的数学成绩
*
* @param stuNum 要输入数学成绩的学生
* @param score 要输入的数学成绩 :通过对输入的学生学号遍历存放学生的集合,找出与用户输入学号一直的学生
* 然后利用遍历出来的学生通过set方法进行插入成绩
*/
public void insertMathScore(String stuNum, float score) {
// 根据stuNum查询到相关的学生,然后进行修改
Student stu = searchStudentByNum(stuNum);
if (stu == null) {
System.out.println("没有找到学号为" + stuNum + "对应的学生");
} else {
stu.setMath(score);
mathScoreList.add(score);
System.out.print(stu);
System.out.println(",数学成绩: " + stu.getMath());
}
}
/**
*
* 获取班级平均成绩
*
* @return 班级平均成绩
*
*/
public float getAvgMathScore() {
float totMathScore = 0, avgMathScore = 0;
for (int i = 0; i < mathScoreList.size(); i++) {
totMathScore = totMathScore + mathScoreList.get(i);
}
avgMathScore = totMathScore / mathScoreList.size();
return avgMathScore;
}
/**
* 删除学生信息
* @param stuNun 要删除学生的学号
*/
public void deleteStudent(String stuNun) {
Student stu=searchStudentByNum(stuNun);
if(stu==null) {
System.out.println("删除失败!\n没有找到学号为"+stuNun+"的学生");
}else {
stuList.remove(stu);
System.out.println("学号为"+stuNun+"的学生删除成功!");
}
}
@Override
public String toString() {
return "班级编号:"+ this.getClassId()+",班级名称:" +this.getClassName();
}
/**
* 显示所有学生信息
*/
public void displayAllStudent() {
if(stuList.isEmpty()) {
System.out.println("还未添加学生信息,请先添加");
}else {
System.out.println("班级里所有学生的信息:");
for(Student student:stuList) {
System.out.println(student);
}
}
}
}
package com.imooc.one;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Scanner;
import java.lang.NullPointerException;
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 playListMenu() {
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 playerMenu() {
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 mainFlow() {
TestDemo t = new TestDemo();
Scanner sc = new Scanner(System.in);
int input = 0, input1 = 0, input2 = 0;
School school = new School();
// 创建主学生列表
BanJi mainBanJiList = new BanJi("0", "主学生列表");
// 将主学生列表添加到学校容器中
school.addBanji(mainBanJiList);
while (true) {
t.mainMenu();
System.out.println("请输入对应数字进行操作: ");
input = sc.nextInt();
if (input == 0) {
System.out.println("退出成功!");
break;
}
switch (input) {
case 1:
// 班级管理菜单
while (true) {
t.playListMenu();
System.out.println("请输入对应的数字对班级进行管理: ");
input1 = sc.nextInt();
if (input1 == 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 + "学生的学号: ");
String stuNum = sc.next();
System.out.println("请输入第" + i + "学生的姓名: ");
String stuName = sc.next();
Student stu = new Student(stuNum, stuName);
mainBanJiList.addStudent(stu);
}
mainBanJiList.displayAllStudent();
break;
case 2:
System.out.println("添加学生信息到普通班级");
System.out.println("请输入要添加学生的班级名称: ");
String className = sc.next();
BanJi banji = school.searchBanJiByName(className);
if (banji == null) {
System.out.println("该班级不存在,请先将班级添加到班级列表中");
} else {
System.out.println("请输入要添加的学生的数量: ");
int count1 = sc.nextInt();
for (int i = 1; i <= count1; i++) {
System.out.println("请输入第"+i+"个学生的学号: ");
String stuNum = sc.next();
// 判断该学号的学生是否在主学生列表中存在
Student stu = mainBanJiList.searchStudentByNum(stuNum);
if (stu == null) {
//如果学生不存在,则创建新的添加,并且添加到主学生列表
System.out.println("该学生在主学生列表不存在,继续输入该学生的其他信息");
System.out.println("请输入第"+i+"个学生的姓名: ");
String stuName=sc.next();
//创建一个Student类的对象进行添加
stu=new Student(stuNum,stuName);
//分别将该学生添加到对应的班级学生列表和主学生列表
banji.addStudent(stu);
mainBanJiList.addStudent(stu);
}else {
//如果学生存在主学生列表,则直接添加到对应的班级类表中
banji.addStudent(stu);
System.out.println("添加成功!");
}
}
//显示班级列表中的学生信息
System.out.println("主学生列表: ");
mainBanJiList.displayAllStudent();
System.out.println("className"+"学生列表:");
banji.displayAllStudent();
}
break;
case 3:
System.out.println("通过学号查询学生信息");
System.out.println("请输入要查询的班级的名称: ");
String className1=sc.next();
BanJi banji1=school.searchBanJiByName(className1);
if(banji1==null) {
System.out.println("该班级不存在");
break;
}else {
System.out.println("请输入该学生的学号: ");
String stuNum=sc.next();
Student stu=banji1.searchStudentByNum(stuNum);
if(stu==null) {
System.out.println("该学生不存在");
}else {
System.out.println("该学生信息为: ");
System.out.println(stu);
}
}
break;
case 4:
System.out.println("输入班级的语文成绩");
System.out.println("请输入要输入语文成绩的班级: ");
className=sc.next();
//判断输入的班级是否存在
banji =school.searchBanJiByName(className);
if(banji!=null) {
List<Student> list1=banji.getStuList();
for(int i=0;i<list1.size();i++) {
//获得学号
String stuNum=list1.get(i).getStuNum();
System.out.println("学号为:"+stuNum);
System.out.println("请输入成绩:");
float score1=0.0f;
try {
score1=sc.nextFloat();
//输入学生成绩
banji.insertChineseScore(stuNum, score1);
}catch(InputMismatchException e) {
System.out.println("不能输入非数字,请重新输入!");
sc.next();
}
}
}else {
System.out.println("该班级不存在!");
}
break;
case 5:
System.out.println("输入班级的数学成绩");
System.out.println("请输入班级的名称");
String cName5 = sc.next();
BanJi b5 = school.searchBanJiByName(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();
b5.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.searchBanJiByName(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 {
b6.deleteStudent(sc6);
System.out.println("删除成功");
}
}
break;
case 7:
System.out.println("显示所有学生信息");
System.out.println("请输入班级的名称");
String cName1 = sc.next();
BanJi b1 = school.searchBanJiByName(cName1);
if (b1 == null) {
System.out.println("该班级不存在");
} else {
b1.displayAllStudent();
}
break;
default:
System.out.println("没有对应的操作");
break;
}
}
break;
case 2:
// 学校管理菜单
while (true) {
t.playerMenu();
System.out.println("请输入对应的数字对班级进行管理: ");
input2 = sc.nextInt();
if (input2 == 9)
break;
switch (input2) {
case 1:
System.out.println("创建班级");
System.out.println("请输入要添加的班级数量: ");
int count = sc.nextInt();
for (int i = 1; i <= count; i++) {
System.out.println("请输入第" + i + "班级的编号: ");
String classId = sc.next();
System.out.println("请输入第" + i + "班级的名称: ");
String className = sc.next();
BanJi banji = new BanJi(classId, className);
school.addBanji(banji);
}
school.displayBanJiName();
break;
case 2:
System.out.println("删除班级 ");
System.out.println("**删除班级**");
System.out.println("请输入要删除的班级名称:");
String banjiName1 = sc.next();
BanJi bj1 = school.searchBanJiByName(banjiName1);
if (banjiName1.equals("主班级")) {
System.out.println("主班级不能删除!");
break;
}
if (bj1 != null) {
school.deleteBanJi(bj1);
} else {
System.out.println("该班级不存在,不能删除!");
}
break;
case 3:
System.out.println("通过班级名称查询班级信息");
System.out.println("请输入要查询的班级名称:");
String banjiName2 = sc.next();
BanJi bj2 = school.searchBanJiByName(banjiName2);
if (bj2 == null) {
System.out.println("该班级不存在!");
} else {
System.out.println("该班级存在!");
bj2.displayAllStudent();
}
break;
case 4:
System.out.println("对各班语文成绩按平均分进行由大到小排序");
mainBanJiList.getAvgChinese();
break;
case 5:
System.out.println("对各班数学成绩按平均分进行由大到小排序 ");
mainBanJiList.getAvgMathScore();
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 t = new TestDemo();
t.mainFlow();
}
}
正在回答 回答被采纳积分+1
case 4: System.out.println("对各班语文成绩按平均分进行由大到小排序"); mainBanJiList.getAvgChinese(); break; case 5: System.out.println("对各班数学成绩按平均分进行由大到小排序 "); mainBanJiList.getAvgMathScore(); break;
case 4和5 都是用mainBanJiList去调用的方法,mainBanJiList是主学生列表,但是你当时添加学生成绩的时候是添加到普通班级去的,
普通班级的mathScoreList,和chineseScoreList这两个属性才有数据,
mainBanJiList主学生列表的mathScoreList,和chineseScoreList没有数据
- 参与学习 人
- 提交作业 9393 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星