4-8作业关于平均成绩的问题

4-8作业关于平均成绩的问题

package com.imooc.student.homework;

public class Student {
// 学生类,定义属性
private String stuNum;// 学号
private String stuName;// 学生名字
private float math;// 数学
private float chinese;// 语文

public Student(String stuNum, String stuName) {
this.stuNum = stuNum;
this.stuName = stuName;
}

public Student(String stuNum, String stuName, float math, float chinese) {
this.stuNum = stuNum;
this.stuName = stuName;
this.math = math;
this.chinese = chinese;
}

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 str = (Student) obj;
return str.getStuNum().equals(stuNum) && str.getStuName().equals(stuName);
}
return false;
}

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


}
package com.imooc.student.homework;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Banji {
//班级类
private String classId; //班级编号
private String className;//班级名称
private List<Student> stuList; //存放学生的集合,也就是班级内学生的信息;

//构造方法

public Banji() {
stuList=new ArrayList<Student>();
}
public Banji(String className) {
this.className = className;
stuList=new ArrayList<Student>();
}

public Banji(String classId,String className) {
this.classId=classId;
this.className=className;
stuList=new ArrayList<Student>();
}
//get/set方法

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;
}
/**
* 将学生添加到班级中
* @param stu 学生对象的信息
*/
public void addStudent(Student stu) {
//排除重复添加情况
//判断该学生是否存在
boolean flag=false;
for(Student s:stuList) {
if(s.getStuNum().equals(stu.getStuNum())) { //对象进行比较,如果已存在
flag=true;
break; //返回true,无需添加
}
}
if(flag) {
System.out.println("学生信息已存在,添加失败!");
}else {
stuList.add(stu);

}
}//添加学生方法结束!

/**
* 通过学号查询学生在班级中是否存在
* @param stuNum 学生的学号
* @return 查到的学生的信息
*/
public Student searchStudentByNum(String stuNum) {
//定义一个Student 的对象,接收信息
Student str=null;
//stuNum是唯一的,所以先进行遍历查询
for(Student s:stuList) {
//进行判断是否一致
if(s.getStuNum().equals(stuNum)){//如果一致则证明查询到了此学生在班级中存在
str=s;
break;
}
}
return str;
}//通过学号查询是否在班级存在方法 结束!

/**
* 输入班级学生的语文成绩
* @param stuNum 学生的学号
* @param score 学生的成绩
*/
public void insertChineseScore(String stuNum,float score) {
//进行学生信息遍历,通过id查询到学生
for(Student s:stuList) {
if(s.getStuNum().equals(stuNum)){//判断学生学号是否一致,如一致进行赋值
s.setChinese(score);
System.out.println("添加语文成绩成功!");
break;
}
}
} // 添加语文成绩方法结束!

/**
* 输入班级学生的数学成绩
* @param stuNum 学生的学号
* @param score 学生的数学成绩
*/
public void insertMathScore(String stuNum,float score) {
//进行学生信息遍历,然后通过学号查询到学生进行判断
for(Student s:stuList) {
//进行判断
if(s.getStuNum().equals(stuNum)) {
//如果传入学生的学号信息和当前s学生信息相同,则进行赋值
s.setMath(score);
System.out.println("添加数学成绩成功!");
break;
}
}
}//添加数学成绩方法结束!

/**
* 通过学号删除学生信息
* @param stuNum 学生学号
*/
public void deleteStudent(String stuNum) {
Student stu=null;
//通过遍历查询学生信息,然后通过学号确定信息是否一致,
for(Student s:stuList) {
if(s.getStuNum().equals(stuNum)) {
stu=s;//如一致进行删除;
stuList.remove(stu);
}else {
System.out.println("没有找到该学生的信息,删除失败!");
}
}
}//删除学生信息方法结束!

/**
* 显示所有学生信息
*/
public void displayAllStudent() {
Iterator<Student> it=stuList.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
public String toString() {

return "班级信息: [班级编号:" + classId + ", 班级名称:" + className + "]";

}






}
package com.imooc.student.homework;

import java.util.ArrayList;
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.Set;

public class School {
//存放班级的集合,key :班级的名称,value:班级内学生的信息
Map<String,Banji> schoolMap;
//构造方法:
public School() {
schoolMap=new HashMap<String,Banji>();
}
//get/set方法
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 :班级的名称;value :班级内学生的信息
schoolMap.put(banji.getClassName(), banji);
}//添加班级方法结束

/**
* 删除班级
* @param banji 要删除班级的信息
*/
public void deleteBanji(Banji banji) {
//要排除重复添加的情况
boolean flag=false;//判断班级信息是否存在
//取出所有班级名称
Set<String> set=schoolMap.keySet();
//进行循环查询,并判断
for(String s:set) {
if(banji.getClassName().equals(s)) {
flag=true;break;
}
}
if(flag) {
//如果为true进行删除,
schoolMap.remove(banji.getClassName());
System.out.println("删除成功!");
}else {
System.out.println("该班级不存在");
}
// //通过key值去删除班级的信息;
// schoolMap.remove(banji.getClassId());
// //提示语句:
// System.out.println("删除成功!");
}//删除班级方法结束

/**
* 通过班级名称查询班级信息
* @param className 班级名称
* @return 查询到的班级信息
*/
public Banji searchByName(String className) {
//创建一个banji的对象为null值,用来接收数据,方法1:
Banji banji=null;
// //通过Map集合把所有key值赋值给 Set集合;
// Set<String>banjiSet=schoolMap.keySet();
// //通过增强循环,查询key值信息是否一致,如一致进行取出key值,
// for(String s:banjiSet) {
// if(s.equals(className)) {
// //通过key值查询Value值,也就是通过班级名称,查询班级内部学生信息
// banji=schoolMap.get(s);
// }
// }
//方法2:通过迭代器方法,因为Map没有迭代器方法,所有通过keySet方法的返回调用iterator方法;
Iterator<String> it=schoolMap.keySet().iterator();
while(it.hasNext()) {
//把查询到的key值赋值给key对象;
String key=it.next();
//继续内容判断 ,当前key的信息与传进来的className进行是否一致,如一致就是查到了;
if(key.equals(className)) {
banji=schoolMap.get(key);
}


}
return banji;
}//通过班级名称查询班级信息方法结束

/**
* 对各班语文成绩平均分进行倒序排序,也就是又大到小
*/
public void sortChineseByAverage() {
//创建Map集合,把key-班级名称,和value-成绩存放Map集合
Map<String,Float>scoreMap=new HashMap<String,Float>();
//取出所有班级名称列表,并赋值给 新对象scoreList;
Set<String> scoreList=schoolMap.keySet();
//用来接收班级名称信息;
Banji bj=null;
//进行遍历班级名称,并判断班级是否存在
for(String s:scoreList) {
if(s.equals("主学生列表")) { //平均成绩只对班级有效,主学生列表包含所有学生,所有跳出循环
continue;
//把查询到的班级名称存放到bj对象中;
} bj=this.searchByName(s);
//对bj信息进行判断
if(bj==null) {
System.out.println("班级不存在!");
}else {//进行成绩存放,
float sum=0.0f; //成绩和
int i=0; //学生人数
//获取每个班级学生信息;
List<Student> listStudent=bj.getStuList();
//用迭代器遍历所有学生信息
Iterator<Student> it=listStudent.iterator();
while(it.hasNext()) {
i++; //每判断还有下一个信息,学生人数+1;
sum+=it.next().getChinese();//成绩和,调用查询到的学生信息然后在调用成绩方法,
}
//获取平均分
float ave=sum/i;
//把平均分添加到Map集合中,班级名称为key值;
scoreMap.put(s, ave);
}
}
//将scoreMap中的每个key-value存放到List集合中进行排序,entrySet方法获取所有键值信息;
List<Map.Entry<String,Float>> list=new ArrayList<Map.Entry<String,Float>>(scoreMap.entrySet());
//对List集合进行排序,并且通过匿名内部类实现排序;
Collections.sort(list, new Comparator<Map.Entry<String,Float>>(){
public int compare(Entry<String,Float> o1,Entry<String,Float>o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
//提示语句
System.out.println("排序后的数据为:");
//把list中所有学生的信息 存放到Map.Entry集合中
for(Map.Entry<String,Float> s:list) {
System.out.println(s.getKey()+"的平均分"+s.getValue());
}
}//语文成绩排序方法结束

/**
* 对各班数学成绩进行降序,也就是从大到小排序;
*/
public void sortMathByAverage() {
//创建Map集合,把key-班级名称,和value-成绩存放Map集合
Map<String,Float>scoreMap=new HashMap<String,Float>();
//取出所有班级信息,并赋值给 新对象scoreList;
Set<String>scoreList=schoolMap.keySet();
//用来接收班级名称信息;
Banji bj=null;
//进行遍历班级名称,并判断班级是否存在
for(String s:scoreList) {
if(s.equals("主学生列表")) {//平均成绩只对存在的班级有效,主学生列表包含所有学生,所有跳出循环
continue;
//把查询到的班级名称存放到bj对象中;
} bj=this.searchByName(s);
//对bj信息进行判断
if(bj==null) {
System.out.println("班级不存在!");
}else {//进行成绩存放,
float sum=0.0f; //成绩
int i=0;//学生人数
//获取每个班级学生信息,并存放到List,新对象中
List<Student> listStudent=bj.getStuList();
//通过迭代器输出所有学生信息;
Iterator<Student> it=listStudent.iterator();
while(it.hasNext()) {
i++;
sum+=it.next().getChinese();
}
//获取平均分
float ave=sum/i;
//把平均分添加到Map集合中,班级名称为key值;
scoreMap.put(s, ave);
}
}
//将scoreMap中的每个key-value存放到List集合中进行排序,entrySet方法获取所有键值信息;
List<Map.Entry<String, Float>> list=new ArrayList<Map.Entry<String,Float>>(scoreMap.entrySet());
//对List集合进行排序,并且通过匿名内部类实现排序;
Collections.sort(list, new Comparator<Map.Entry<String, Float>>() {
public int compare(Map.Entry<String, Float>o1,Map.Entry<String, Float>o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
//提示语句
System.out.println("排序后的数据为:");
//把list中所有学生的信息 存放到Map.Entry集合中
for(Map.Entry<String, Float> s:list) {
System.out.println(s.getKey()+"的平均分"+s.getValue());
}
}//数学成绩排序方法结束

/**
* 显示所有班级名称
*/
public void displayBanjiName() {
//先取出所有班级名称信息
String key=null;
Set<String> set=schoolMap.keySet();
for(String s:set) {
key=s;
System.out.println(key);
}

//通过迭代器方法
// Iterator<Banji> it=schoolMap.values().iterator();
// while(it.hasNext()) {
// System.out.println(it.next().getClassName());
// }
}//显示所有班级名称方法结束
}

测试类:

​package com.imooc.student.homework;

import java.util.InputMismatchException;
import java.util.List;
import java.util.Scanner;

public class TestDemo {

/**
* 班级的测试方法
*/
public void testBanji() {
//实例化创建对象
Student stu1=new Student("soo1","张三");
Student stu2=new Student("soo2","李四");
Student stu3=new Student("soo3","王五");
Student stu4=new Student("soo1","张四");
Banji bj=new Banji("soo1","一班");
//测试1:将学生添加到班级中
bj.addStudent(stu1);
bj.addStudent(stu2);
bj.addStudent(stu3);
//重复添加学生到班级中
bj.addStudent(stu4);
// 显示所有班级的信息
bj.displayAllStudent();
//测试通过学号查询学生信息
System.out.println("通过学号查询学生信息:");
System.out.println(bj.searchStudentByNum("soo1"));

//输入班级的语文数学成绩测试
bj.insertChineseScore("soo1", 80);
System.out.println(stu1+"的语文成绩为:"+stu1.getChinese());
//测试删除学生信息
bj.deleteStudent("soo2");
System.out.println("删除后的信息为:");
bj.displayAllStudent();
}

/**
* 学校的测试方法
*/
public void testSchool() {
//添加班级
Student stu1=new Student("s001","张三");
Student stu2=new Student("s002","李四");
Student stu3=new Student("s003","王五");
Banji bj=new Banji("s0001","三班");
bj.addStudent(stu1);
bj.addStudent(stu2);
bj.addStudent(stu3);
bj.insertChineseScore("s001", 80);
bj.insertChineseScore("s002",70);
bj.insertChineseScore("s003", 60);
School sc=new School();
sc.addBanji(bj);
//添加普通班级信息,并从主学生列表读取信息
Banji bj1=new Banji("s0002","一班");
bj1.addStudent(bj.getStuList().get(0));
bj1.addStudent(bj.getStuList().get(1));
bj1.addStudent(bj.getStuList().get(2));
sc.addBanji(bj1);
System.out.println("显示所有班级信息:");
sc.displayBanjiName();
//删除班级
sc.deleteBanji(bj1);
System.out.println("删除后班级信息为:");
sc.displayBanjiName();
//通过班级名称查询班级
System.out.println(sc.searchByName("主学生列表"));
System.out.println(sc.searchByName("一班"));
//对成绩平均分进行排序

sc.sortChineseByAverage();
}
/**
* 主菜单
*/
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("*******************************************************");
}

/**
* 主流程
*/
public void test() {
//实例化测试类
TestDemo td=new TestDemo();
Scanner sc=new Scanner(System.in);
//定义3个变量,用来接收菜单数据
int input=0,input1=0,input2=0;
//创建学校对象并实例化
School sch=new School();
//创建班级对象(主学生列表)并实例化
Banji mainBanJi=new Banji("主学生列表");
//将班级对象添加到学校中,后期在case中再添加学生信息
sch.addBanji(mainBanJi);
//声明其他班级对象信息,后期用来接收其他班级信息
Banji otherBanJi=null;

//进行循环主菜单
while(true) {
td.mainMenu();
System.out.println("请输入对应数字进行列表管理");
//从键盘接收数据,input为控制主菜单列表管理
try {
input=sc.nextInt();
if(input==0) {
break;
}
} catch (InputMismatchException e) {
System.out.println("输入信息有误,只可输入整数,请重新输入!");
sc.next();//接收错误数据
continue;//重新执行本次循环
}
switch(input) {
case 1://班级管理
while(true) {
td.banjiMenu();
System.out.println("请输入对应数字进行班级列表管理");
try {
input1=sc.nextInt();
} catch (InputMismatchException e) {
System.out.println("输入信息有误,只可输入整数,请重新输入!");
sc.next();//接收错误数据
continue;//重新执行本次循环
}
if(input1==9) {
break;
}
switch(input1) {
case 1:
System.out.println("添加学生信息到主学生列表");
System.out.println("请输入要添加的学生信息个数:");
int count=0;
try {
count = sc.nextInt();
} catch (InputMismatchException e) {
System.out.println("输入信息有误,只可输入整数,请重新输入!");
sc.next();//接收错误数据
continue;
}
for(int i=1;i<=count;i++) {
System.out.println("请输入第"+i+"个学生的信息");
System.out.println("请输入学生的id:");
String strNum=sc.next();
System.out.println("请输入学生的姓名:");
String strName=sc.next();
//创建学生对象
Student stu=new Student(strNum,strName);
//把学生信息添加到主学生列表
mainBanJi.addStudent(stu);
System.out.println("添加成功");
}
System.out.println(mainBanJi.getClassName()+"的学生信息为:");
mainBanJi.displayAllStudent();
break;
case 2:
System.out.println("添加学生信息到普通列表");
System.out.println("请输入要添加的班级名称:");
String strName=sc.next();
//判断班级名称是否存在
otherBanJi=sch.searchByName(strName);
if(otherBanJi==null) {
System.out.println("未查询到此班级");
}else {
System.out.println("请输入要添加的学生个数:");
int count1=0;
try {
count1=sc.nextInt();
} catch (InputMismatchException e) {
System.out.println("输入信息有误,只可输入整数,请重新输入!");
sc.next();//接收错误数据
continue;
}
for(int i=1;i<=count1;i++) {
System.out.println("请输入第"+i+"个学生信息:");
System.out.println("请输入要添加的学生id:");
String strNum=sc.next();
Student stu=mainBanJi.searchStudentByNum(strNum);
if(stu==null) {
//主学生列表如果不存在此学生信息,那么需要在主学生列表也添加此学生信息
System.out.println("该学生信息在主学生列表当中不存在,请输入学生的其他信息");
System.out.println("请输入要添加的学生姓名:");
String strName1=sc.next();
//创建一个学生对象。
stu=new Student(strNum,strName1);
mainBanJi.addStudent(stu);
otherBanJi.addStudent(stu);

}else {
otherBanJi.addStudent(stu);

}
System.out.println("添加成功");
}
//显示所有班级的信息
System.out.println(mainBanJi.getClassName());
mainBanJi.displayAllStudent();
System.out.println(otherBanJi.getClassName()+"班级列表");
otherBanJi.displayAllStudent();
}
break;
case 3:
System.out.println("通过学号查询学生信息");
System.out.println("请输入要查询的班级名称:");
String strName1=sc.next();
Banji bj=sch.searchByName(strName1);
if(bj==null) {
System.out.println("此班级不存在");
}else {
System.out.println("请输入要查询的学生Id:");
String strNum=sc.next();
Student stu = bj.searchStudentByNum(strNum);
if(stu==null) {
System.out.println("该学生信息在"+bj.getClassName()+"不存在");
}else {
System.out.println(stu);
}
}
break;
case 4:
System.out.println("输入班级的语文成绩");
System.out.println("请输入班级的名称:");
String strName2=sc.next();
bj=sch.searchByName(strName2);
if(bj==null) {
System.out.println("该班级不存在");
}else {
for(Student stu:bj.getStuList()) {
System.out.println("学生id:"+stu.getStuNum()+"学生姓名:"+stu.getStuName());
System.out.println("请输入学生的语文成绩:");
try {
float scoer=sc.nextFloat();
} catch (InputMismatchException e) {
System.out.println("输入信息有误,只可输入数字,请重新输入!");
sc.next();//接收错误数据
continue;
}
bj.insertChineseScore(stu.getStuNum(),stu.getChinese());
}
}
break;
case 5:
System.out.println("输入班级的数学成绩");
System.out.println("请输入班级的名称:");
String strName3=sc.next();
bj=sch.searchByName(strName3);
if(bj==null) {
System.out.println("该班级不存在");
}else {
for(Student stu:bj.getStuList()) {
System.out.println("学生id:"+stu.getStuNum()+"学生姓名:"+stu.getStuName());
System.out.println("请输入数学成绩:");
try {
float score=sc.nextFloat();
} catch (InputMismatchException e) {
System.out.println("输入信息有误,只可输入数字,请重新输入!");
sc.next();//接收错误数据
continue;
}
bj.insertMathScore(stu.getStuNum(), stu.getMath());
}
}
break;
case 6:
System.out.println("删除学生信息");
System.out.println("请输入班级的名称:");
String strName4=sc.next();
bj=sch.searchByName(strName4);
if(bj==null) {
System.out.println("该班级不存在!");
}else {
System.out.println("请输入学生Id:");
String strNum2=sc.next();
Student stu=bj.searchStudentByNum(strNum2);
if(stu==null) {
System.out.println("没有找到"+stu.getStuNum()+"的学生信息");
}else {
bj.deleteStudent(strNum2);
System.out.println("删除成功");
}
}
break;
case 7:
System.out.println("显示所有学生信息");
System.out.println("请输入班级的名称:");
String strName5=sc.next();
bj=sch.searchByName(strName5);
if(bj==null) {
System.out.println("该班级不存在");
}else {
bj.displayAllStudent();
}
break;
default :
System.out.println("输入有误,没有对应的操作");
}
}
break;
case 2://学校管理
while(true) {
td.schoolMenu();;
System.out.println("请输入对应的数字进行学校列表管理");
try {
input2=sc.nextInt();
} catch (InputMismatchException e) {
System.out.println("输入信息有误,只可输入整数,请重新输入!");
sc.next();
continue;
}
if(input2==9) {
break;
}
switch(input2) {
case 1:
System.out.println("向学校中添加班级");
System.out.println("请输入班级编号:");
String strNum=sc.next();
System.out.println("请输入班级名称:");
String strName=sc.next();
Banji bj1=sch.searchByName(strName);
if(bj1==null) {
System.out.println("");
//创建新的班级
otherBanJi=new Banji(strNum,strName);
//把新创建的班级添加到学校中
sch.addBanji(otherBanJi);
System.out.println("添加成功");
}else {
System.out.println("添加失败,信息重复");
}
break;
case 2:
System.out.println("从学校中删除班级");
System.out.println("请输入班级名称:");
String strName1=sc.next();
Banji bj2=sch.searchByName(strName1);
if(bj2==null) {
System.out.println("该班级不存在");
}else {
sch.deleteBanji(bj2);
System.out.println("删除成功");
}
break;
case 3:
System.out.println("通过班级名称查询班级");
System.out.println("请输入需要查询班级的名称:");
String strName2=sc.next();
Banji bj3=sch.searchByName(strName2);
if(bj3==null) {
System.out.println("此班级不存在");
}else {
System.out.println(bj3);
}
break;
case 4:
System.out.println("对各班语文成绩按平均分进行由大到小排序");

if(mainBanJi.getStuList().isEmpty()) {
System.out.println("还未向班级中添加学生");
}else {
for(Student stu:mainBanJi.getStuList()) {
if(stu.getChinese()<0.0||stu.getMath()<0.0) {
System.out.println("该班成绩还未添加,需先添加班级成绩");
}else {
System.out.println("语文平均成绩由大到小的排序为:");
sch.sortChineseByAverage();
}
}



}

break;
case 5:
System.out.println("对各班数学成绩按平均分进行由大到小排序");
if(mainBanJi.getStuList().isEmpty()) {
System.out.println("还未向班级中添加学生");
}else {
System.out.println("数学平均成绩由大到小的排序为:");
sch.sortMathByAverage();}
break;
case 6:
System.out.println("显示所有班级名称");
System.out.println("所有的班级名称为:");
sch.displayBanjiName();
break;
default:
System.out.println("输入有误,没有对应的操作");
}
}
break;
default :
System.out.println("输入有误,没有对应的操作");
}
}
}//方法结束

public static void main(String[] args) {
// TODO Auto-generated method stub
TestDemo t=new TestDemo();
// t.testBanji();
// t.testSchool();
t.test();

}

}

问题:

如果在没有创建班级的时候,在

4--对各班语文成绩平均分进行由大到小排序,结果为:

还未向班级中添加学生; 但是如果对主列表学生添加过信息后,并为对班级中添加学生,结果为平均分

一班的平均分NaN,怎么解决这个问题阿。应该提示还没向班级添加成绩。而不是这个。我用otherBanJi.getStuList();会出现空指针异常;


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

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

1回答
好帮手慕阿园 2021-02-07 10:34:15

同学你好,if判断条件应该是==0.0f,并且这里是对语文成绩的排序,只需要判断语文成绩即可

http://img1.sycdn.imooc.com//climg/601f517509bb6c5c04150085.jpg

修改如下

http://img1.sycdn.imooc.com//climg/601f51a0091991b905320096.jpg

祝学习愉快~

  • 提问者 rock221 #1
    修改后的:
    case 4:
    System.out.println("对各班语文成绩按平均分进行由大到小排序");

    if(mainBanJi.getStuList().isEmpty()) {
    System.out.println("还未向班级中添加学生");
    }else {
    for(Student stu:mainBanJi.getStuList()) {
    if(stu.getChinese()==0.0f) {
    System.out.println("该班成绩还未添加,需先添加班级成绩");
    }else {
    System.out.println("语文平均成绩由大到小的排序为:");
    sch.sortChineseByAverage();
    }
    }

    break;

    修改后添加过班级信息,结果如下: 提示

    该班成绩还未添加,需先添加班级成绩

    ​***************************
    **主菜单**
    1--班级管理
    2--学校管理
    0--退出
    ***************************
    请输入对应数字进行列表管理
    2
    *******************************************************
    **学校管理**
    1--创建班级
    2--删除班级
    3--通过班级名称查询班级信息
    4--对各班语文成绩平均分进行由大到小排序
    5--对各班数学成绩平均分进行由大到小排序
    6--显示所有班级名称
    9--返回上级菜单
    *******************************************************
    请输入对应的数字进行学校列表管理
    1
    向学校中添加班级
    请输入班级编号:
    1
    请输入班级名称:
    一班

    添加成功
    *******************************************************
    **学校管理**
    1--创建班级
    2--删除班级
    3--通过班级名称查询班级信息
    4--对各班语文成绩平均分进行由大到小排序
    5--对各班数学成绩平均分进行由大到小排序
    6--显示所有班级名称
    9--返回上级菜单
    *******************************************************
    请输入对应的数字进行学校列表管理
    9
    ***************************
    **主菜单**
    1--班级管理
    2--学校管理
    0--退出
    ***************************
    请输入对应数字进行列表管理
    1
    *******************************************************
    **班级管理**
    1--添加学生信息到主学生列表
    2--添加学生信息到普通班级
    3--通过学号查询学生信息
    4--输入班级语文成绩
    5--输入班级数学成绩
    6--删除学生信息
    7--显示所有学生信息
    9--返回上级菜单
    *******************************************************
    请输入对应数字进行班级列表管理
    1
    添加学生信息到主学生列表
    请输入要添加的学生信息个数:
    1
    请输入第1个学生的信息
    请输入学生的id:
    1
    请输入学生的姓名:
    张三
    添加成功
    主学生列表的学生信息为:
    学生信息: [学号:1, 姓名:张三]
    *******************************************************
    **班级管理**
    1--添加学生信息到主学生列表
    2--添加学生信息到普通班级
    3--通过学号查询学生信息
    4--输入班级语文成绩
    5--输入班级数学成绩
    6--删除学生信息
    7--显示所有学生信息
    9--返回上级菜单
    *******************************************************
    请输入对应数字进行班级列表管理
    2
    添加学生信息到普通列表
    请输入要添加的班级名称:
    一班
    请输入要添加的学生个数:
    1
    请输入第1个学生信息:
    请输入要添加的学生id:
    2
    该学生信息在主学生列表当中不存在,请输入学生的其他信息
    请输入要添加的学生姓名:
    王五
    添加成功
    主学生列表
    学生信息: [学号:1, 姓名:张三]
    学生信息: [学号:2, 姓名:王五]
    一班班级列表
    学生信息: [学号:2, 姓名:王五]
    *******************************************************
    **班级管理**
    1--添加学生信息到主学生列表
    2--添加学生信息到普通班级
    3--通过学号查询学生信息
    4--输入班级语文成绩
    5--输入班级数学成绩
    6--删除学生信息
    7--显示所有学生信息
    9--返回上级菜单
    *******************************************************
    请输入对应数字进行班级列表管理
    4
    输入班级的语文成绩
    请输入班级的名称:
    一班
    学生id:2学生姓名:王五
    请输入学生的语文成绩:
    80
    添加语文成绩成功!
    *******************************************************
    **班级管理**
    1--添加学生信息到主学生列表
    2--添加学生信息到普通班级
    3--通过学号查询学生信息
    4--输入班级语文成绩
    5--输入班级数学成绩
    6--删除学生信息
    7--显示所有学生信息
    9--返回上级菜单
    *******************************************************
    请输入对应数字进行班级列表管理
    9
    ***************************
    **主菜单**
    1--班级管理
    2--学校管理
    0--退出
    ***************************
    请输入对应数字进行列表管理
    2
    *******************************************************
    **学校管理**
    1--创建班级
    2--删除班级
    3--通过班级名称查询班级信息
    4--对各班语文成绩平均分进行由大到小排序
    5--对各班数学成绩平均分进行由大到小排序
    6--显示所有班级名称
    9--返回上级菜单
    *******************************************************
    请输入对应的数字进行学校列表管理
    4
    对各班语文成绩按平均分进行由大到小排序
    该班成绩还未添加,需先添加班级成绩
    该班成绩还未添加,需先添加班级成绩
    *******************************************************
    **学校管理**
    1--创建班级
    2--删除班级
    3--通过班级名称查询班级信息
    4--对各班语文成绩平均分进行由大到小排序
    5--对各班数学成绩平均分进行由大到小排序
    6--显示所有班级名称
    9--返回上级菜单
    *******************************************************
    请输入对应的数字进行学校列表管理


    2021-02-07 10:56:43
  • 提问者 rock221 #2

    老师,已经解决了,是因为我在班级语文成绩写入的时候,代码弄错了。 所以导致没赋值从键盘接收的数据 

    2021-02-07 13:03:54
  • 好帮手慕阿园 回复 提问者 rock221 #3

    同学自己找到了问题所在,很棒呐 ,继续加油

    祝学习愉快~

    2021-02-07 13:36:15
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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