老师我这个数学和语文的平均成绩是没有调用出来还是我在bj中的代码写错了呢

老师我这个数学和语文的平均成绩是没有调用出来还是我在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

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

2回答
好帮手慕阿满 2020-07-27 16:42:16

同学你好,对各班成绩按平均分排序的方法应该写在School类中,使用School类对象调用方法,如:

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

祝:学习愉快~

慕丝1539783 2020-07-27 14:40:57
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没有数据


  • 提问者 轻舞的穹 #1
    那么我就是要再降普通班级的代码带到case4和case5中吗
    2020-07-27 15:05:58
  • 慕丝1539783 回复 提问者 轻舞的穹 #2
    各班成绩级排序应该写在School的类方法里。 school里得到各个班级列表(除主学生列表外),遍历得到各个普通班级对象,普通班级对象调用getAvgMathScore()得到平均分。 至于怎么排序,那个是后话了。 你是调用的对象选错了。不应该用主学生列表去调用getAvgMathScore()。
    2020-07-27 17:23:46
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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