老师,关于运行后这里显示不出来指定班级的学生信息。

老师,关于运行后这里显示不出来指定班级的学生信息。

老师,整体代码如下,还未完善,现在卡在这里。经其他项测试,貌似是学生信息没有放进班级列表里,还请老师查看

//班级类

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();
   }
}


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

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

2回答
好帮手慕小尤 2020-09-07 09:51:52

同学你好,1. 在一个java类中如果没有写构造方法,JVM(Java虚拟机)会默认添加一个无参构造方法,但是当写了有参构造后,JVM(Java虚拟机)不会再默认添加一个,如果只写了一个带参构造,假如有一个子类继承了它,一般子类的无参构造默认去调用的是父类的无参构造(而此时父类并没有无参构造),这个时候就会报错了。所以无论用或不用都建议同学把无参构造写上,这是一个良好的编码习惯。

2. 当同学未定义班级类的无参构造,但进行调用,也会出现异常的情况。

3. 在此作业中同学对InputMismatchException异常进行处理即可。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快~

好帮手慕小尤 2020-09-06 18:01:01

同学你好,1. 添加学生时,存在空指针异常,如下图所示:

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

建议同学参考下方代码进行修改:

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

  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

祝学习愉快!

  • 提问者 慕虎1394068 #1
    谢谢老师,我在班级类增加了无参构造就又可以了,请问是什么原因呢?没有无参构造会产生哪些问题? 另外,老师,这个作业需要添加哪些异常处理?
    2020-09-06 21:26:26
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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