老师,关于运行后这里显示不出来指定班级的学生信息。
老师,整体代码如下,还未完善,现在卡在这里。经其他项测试,貌似是学生信息没有放进班级列表里,还请老师查看
//班级类
package student.management.system; import java.util.ArrayList; import java.util.List; import java.util.Objects; public class Banji { private String classId; private String className; private List <Student>stuList; public Banji(){ } public Banji(String classId, String className) { this.classId = classId; this.className = className; stuList = new ArrayList<Student>(); } 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 stu1:stuList){ if (stu1.equals(stu)){ flag=true;break; } } if (flag){ System.out.println("该学生已经存在于班级中,添加失败!"); }else{ stuList.add(stu); } } public Student searchStudentByNum(String stuNum){ Student stu=null; for (Student stu1:stuList){ if (stu1.getStuNum().equals(stuNum)){ stu=stu1;break;//表明找到了 } } return stu; } /** * 输入班级学生的语文成绩 * @param stuNum * @param score */ public void insertChineseScore(String stuNum,float score){ Student stu1=searchStudentByNum(stuNum); if (stu1==null){ System.out.println("没有找到学号为"+stuNum+"对应的学生信息!"); }else{ stu1.setChinese(score); } } /** * 输入班级学生的数学成绩 * @param stuNum * @param score */ public void insertMathScore(String stuNum,float score){ Student stu1=searchStudentByNum(stuNum); if (stu1==null){ System.out.println("没有找到学号为"+stuNum+"对应的学生信息!"); }else{ stu1.setMath(score); } } /** * 删除班级中的制定学生信息 * @param stuNum 学生学号 */ public void deleteStudent(String stuNum){ Student stu=searchStudentByNum(stuNum); if (stu!=null){ stuList.remove(stu); }else{ System.out.println("没有找到学号为"+stuNum+"对应的学生信息!"); } } /** * 显示班级中的所有学生信息 */ public void displayAllStudent(){ for (Student stu:stuList){ System.out.println(stu); } } }
//测试类
package student.management.system;import java.util.InputMismatchException;
import java.util.List;
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("********************");
}
//学校管理菜单:
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();
School school=new School();
Banji mainBanjiList=new Banji("c000","主学生列表");
school.addBanji(mainBanjiList);
Scanner sc=new Scanner(System.in);
boolean flag=true;
while (flag){
td.mainMenu();
System.out.println("请输入对应数字进行列表管理");
int input=sc.nextInt();
switch (input){
case 1:
boolean flag2=true;
while (flag2) {
System.out.println("请输入对应数字进行班级列表管理:");
td.banjiMenu();
int inputBanji=sc.nextInt();
switch (inputBanji) {
case 1: //添加学生信息到主学生列表
System.out.println("添加学生信息到主学生列表中");
System.out.println("请输入要添加的学生信息个数:");
int input1 = sc.nextInt();
for (int i = 0; i < input1; i++) {
System.out.println("请输入第" + (i + 1) + "个学生信息");
System.out.println("请输入学生id:");
String id = sc.next();
System.out.println("请输入学生姓名:");
String name = sc.next();
Student stu = new Student(id, name);
mainBanjiList.addStudent(stu);
System.out.println("添加成功");
}
System.out.println("主学生列表的学生信息为:");
mainBanjiList.displayAllStudent();
break;
case 2://添加学生信息到普通班级
System.out.println("添加学生信息到普通班级");
System.out.println("请输入要添加的班级名称:");
String input2=sc.next();
if (school.searchByName(input2)==null){
System.out.println("该班级不存在,请先将班级添加到班级列表中");
}else{
System.out.println("请输入要添加的学生个数:");
int input3=sc.nextInt();
for (int i=0;i<input3;i++){
System.out.println("请输入第"+(i+1)+"个学生信息");
System.out.println("请输入要添加的学生id:");
String input4=sc.next();
if (mainBanjiList.searchStudentByNum(input4)==null){
System.out.println("该学生信息在主学生列表中不存在,请输入学生的其他信息");
System.out.println("请输入学生的姓名");
String input5=sc.next();
Student stu=new Student(input4,input5);
school.searchByName(input2).addStudent(stu);
mainBanjiList.addStudent(stu);
}else {
Student stu=school.searchByName(input2).searchStudentByNum(input4);
school.searchByName(input2).addStudent(stu);
System.out.println("添加成功");
}
}
System.out.println("主学生列表的学生信息为:");
mainBanjiList.displayAllStudent();
System.out.println(input2+"的学生信息为:");
school.searchByName(input2).displayAllStudent();
}
break;
case 3://添加学号查询学生信息
System.out.println("请输入学生所在的班级");
String input6=sc.next();
if (school.searchByName(input6)==null){
System.out.println("该班级不存在");
continue;
}else{
System.out.println("请输入要查询的学号:");
String input7=sc.next();
if (school.searchByName(input6).searchStudentByNum(input7)==null){
System.out.println("该学号在该班级不存在");
continue;
}else {
System.out.println("学生信息如下");
school.searchByName(input6).searchStudentByNum(input7).toString();
}
}
break;
case 4://输入班级的语文成绩
System.out.println("请输入要输入语文成绩的班级名称");
String input8=sc.next();
Banji banji=school.searchByName(input8);
if (banji==null){
System.out.println("该班级不存在");
continue;
}else{
List<Student> list1 = banji.getStuList();
for (int i=0;i<list1.size();i++){
String stuNum= list1.get(i).getStuNum();
System.out.println("请输入学号为"+stuNum+"的学生语文成绩");
try {
float scoreChinese = sc.nextFloat();
banji.insertChineseScore(stuNum,scoreChinese);
}catch(InputMismatchException e){
System.out.println("不能输入非数字,请重新输入");
sc.next();
}
}
}
break;
case 5://输入班级的数学成绩
System.out.println("请输入要输入数学成绩的班级名称");
String input9=sc.next();
Banji banji2=school.searchByName(input9);
if (banji2==null){
System.out.println("该班级不存在");
continue;
}else{
List<Student> list1 = banji2.getStuList();
for (int i=0;i<list1.size();i++){
String stuNum= list1.get(i).getStuNum();
System.out.println("请输入学号为"+stuNum+"的学生数学成绩");
try {
float scoreMath = sc.nextFloat();
banji2.insertMathScore(stuNum,scoreMath);
}catch(InputMismatchException e){
System.out.println("不能输入非数字,请重新输入");
sc.next();
}
}
}
break;
case 6://删除学生信息
System.out.println("删除学生信息");
System.out.println("请输入班级名称");
String input10=sc.next();
Banji banji3=school.searchByName(input10);
if (banji3==null) {
System.out.println("该班级不存在");
}else{
System.out.println("请输入学生id");
String input11=sc.next();
if (banji3.searchStudentByNum(input11)==null){
System.out.println("没有找到学号为"+input11+"的学生信息");
}else{
banji3.deleteStudent(input11);
System.out.println("删除成功");
}
}
break;
case 7://显示所有学生信息
System.out.println("请输入要显示所有学生信息的班级");
System.out.println("请输入班级名称");
String input12=sc.next();
Banji banji4=school.searchByName(input12);
if (banji4==null) {
System.out.println("该班级不存在");
}else{
banji4.displayAllStudent();
}
break;
case 9://返回上一级菜单
flag2=false;
break;
default:
System.out.println("没有对应的操作");
}
}
break;
case 2:
boolean flag3=true;
while (flag3) {
td.schoolMenu();
System.out.println("请输入对应数字进行学校列表管理");
int inputSchool=sc.nextInt();
switch (inputSchool){
case 1://创建班级
System.out.println("向学校中添加班级");
System.out.println("请输入班级编号:");
String id=sc.next();
System.out.println("请输入班级名称:");
String name=sc.next();
Banji bj=new Banji(id,name);
school.addBanji(bj);
school.displayBanJiName();
break;
case 2://删除班级
System.out.println("删除班级");
System.out.println("请输入要删除的班级名称:");
String deleteBanjiName=sc.next();
Banji bj1=school.searchByName(deleteBanjiName);
if (bj1!=null){
school.deleteBanji(bj1);
school.displayBanJiName();
}else{
System.out.println("该班级不存在,不能删除");
}
break;
case 3://通过班级名称查询班级信息
System.out.println("通过班级名称查询班级信息");
System.out.println("请输入班级名称");
String searchBanjiName=sc.next();
Banji bj2=school.searchByName(searchBanjiName);
if (bj2!=null){
bj2.displayAllStudent();
}else{
System.out.println("该班级不存在");
}
break;
case 4://对各班语文成绩按平均分进行由大到小排序
school.sortChineseByAverage();
break;
case 5://对各班数学成绩按平均分进行由大到小排序
school.sortMathByAverage();
break;
case 6://显示所有班级名称
school.displayBanJiName();
break;
case 9://返回上一级菜单
flag3=false;
break;
default:
System.out.println("没有对应的操作");
}
}
break;
case 0:
System.exit(0);
default:
System.out.println("输入有误,没有对应的操作");break;
}
}
}
public static void main(String[] args) {
TestDemo td=new TestDemo();
td.test();
}
}
15
收起
正在回答 回答被采纳积分+1
2回答
好帮手慕小尤
2020-09-07 09:51:52
同学你好,1. 在一个java类中如果没有写构造方法,JVM(Java虚拟机)会默认添加一个无参构造方法,但是当写了有参构造后,JVM(Java虚拟机)不会再默认添加一个,如果只写了一个带参构造,假如有一个子类继承了它,一般子类的无参构造默认去调用的是父类的无参构造(而此时父类并没有无参构造),这个时候就会报错了。所以无论用或不用都建议同学把无参构造写上,这是一个良好的编码习惯。
2. 当同学未定义班级类的无参构造,但进行调用,也会出现异常的情况。
3. 在此作业中同学对InputMismatchException异常进行处理即可。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快~
好帮手慕小尤
2020-09-06 18:01:01
同学你好,1. 添加学生时,存在空指针异常,如下图所示:
建议同学参考下方代码进行修改:
case 2://添加学生信息到普通班级 System.out.println("添加学生信息到普通班级"); System.out.println("请输入要添加的班级名称:"); String input2=sc.next(); BanJi banJi=school.searchByName(input2); if (banJi==null){ System.out.println("该班级不存在,请先将班级添加到班级列表中"); }else{ System.out.println("请输入要添加的学生个数:"); int input3=sc.nextInt(); for (int i=0;i<input3;i++){ System.out.println("请输入第"+(i+1)+"个学生信息"); System.out.println("请输入要添加的学生id:"); String input4=sc.next(); Student stu= mainBanjiList.searchStudentByNum(input4); if (stu==null){ System.out.println("该学生信息在主学生列表中不存在,请输入学生的其他信息"); System.out.println("请输入学生的姓名"); String input5=sc.next(); stu=new Student(input4,input5); banJi.addStudent(stu); mainBanjiList.addStudent(stu); }else { banJi.addStudent(stu); System.out.println("添加成功"); } } System.out.println("主学生列表的学生信息为:"); mainBanjiList.displayAllStudent(); System.out.println(input2+"的学生信息为:"); banJi.displayAllStudent(); } break;
2. 当类名由一个单词组成时,该单词首字母大写;如果类名由多个单词组成,则每个单词的首字母均大写。如:BanJi应改为:Banji
祝学习愉快!
java工程师2020版
- 参与学习 人
- 提交作业 9393 份
- 解答问题 16556 个
综合就业常年第一,编程排行常年霸榜,无需脱产即可学习,北上广深月薪过万 无论你是未就业的学生还是想转行的在职人员,不需要基础,只要你有梦想,想高薪
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星