关于equals方法导致的空指针异常如何解决

一名大一学生,最近有一个简单学生信息管理系统的作业,在运行的时候有一个空指针异常,在网上搜寻了各种解释以及解决办法都没有能够解决,请各位大神帮忙指点一下。为了方便我把所涉及的类都放在了下面,但是出现异常的在第一个类。

ScoreData类

这个类的要求是通过键盘输入若干组学生课程成绩值,每组学生课程成绩值包含(学号,课程号,成绩)三个数据;要求注意学号和课程号和前面的数据保持一致,即,学号和课程号的值必须是StudentData和CourseData中有的数据,如在前两个类中没有,不要加入。
出现的问题是在 if(sid.equals(StudentData.stus[i].getStuNo())) 这一句。
异常为请输入学生的学号:02 请输入课程号: 11 请输入学生成绩: 60
Exception in thread "main" java.lang. NullPointerException
at edu.jxau.ciec.data.ScoreData.main(ScoreData.java:41)空指针异常

    public class ScoreData {
    public static  Score[] sco=new Score[10];//声明一个Score类型数组
    public static int realLength=0;

    public  static void add(Score scor){//添加数据
        sco [realLength] =scor;
        realLength++;
    }
    public  static void  findAll(){//查找数据
        for (int i = 0; i < realLength; i++) {
            System.out.println(sco[i]);
        }
        System.out.println("当前有"+realLength+"个学生数据");
    }
    public static void main(String[] args) {

        System.out.print("请输入学生的学号:");
        Scanner SId = new Scanner(System.in);  
        String sid = SId.nextLine();

        System.out.println("请输入课程号:");
        Scanner COU = new Scanner(System.in);
        int cous = COU.nextInt();

        System.out.println("请输入学生成绩:");
        Scanner SCO = new Scanner(System.in);
        int sco = SId.nextInt();  

        for(int i=0;i<StudentData.stus.length;i++) {
        //遍历“学生数据”数组,stus是学生数据数组名,stus是Student类型

            if(sid.equals(StudentData.stus[i].getStuNo())) {
            //调用Student类中的getters方法获取“学号”与键盘输入学号作比较
            //问题代码句

                for(int j=0;j<CourseData.course.length;j++) {
                //遍历“课程数据”数组,course是课程数据数组名,course是Course类型 

                    if(cous==CourseData.course[i].getCourseNo()) {
                    //调用Course类中的getters方法获取“课程号”与键盘输入课程号作比较

                        ScoreData.add(new Score(sid,cous,sco) );
                        //信息匹配,可以添加该学生的成绩值

                }else break;
            }            
        }
            else System.out.println("抱歉,未成功找到该学生,请重新输入信息!");
        }

        }
    }

Student类

public class Student {
private String stuNo;
private String stuName;
private String gender;
private int  age;
public Student() {    }

public Student(String stuNo, String stuName, String gender, int age) {
    this.stuNo = stuNo;
    this.stuName = stuName;
    this.gender = gender;
    this.age = age;
}
@Override
public String toString() {
    return "Student [学号:" + stuNo + ",学生姓名 " + stuName + ", 性别" + gender + ", 年龄" + age + "]";
}
public String getStuNo() {
    return stuNo;
}
public void setStuNo(String stuNo) {
    this.stuNo = stuNo;
}

StudentData类

    public static   Student[] stus=new Student[10];//声明学生类数组
    public static int realLength=0;

    public static  void add(Student stu){//添加学生成员方法
        stus[realLength] =stu;
        realLength++;
    }
    public static   void  findAll(){//查找所有成员
        for (int i = 0; i < realLength; i++) {
            System.out.println(stus[i]);
        }
        System.out.println("当前有"+realLength+"个学生数据");
    }
    public static void main(String[] args) {
        //添加学生成员数据
        StudentData.add(new Student("01","Tom","男",20));

        StudentData.add(new Student("02","Lily","女",19));

        StudentData.add(new Student("03","GAI","男",20));

        StudentData.add(new Student("04","Poly","女",18));

        StudentData.add(new Student("05","Mary","女",21));

        StudentData.add(new Student("06","Smith","男",18));

        StudentData.add(new Student("07","Manee","女",19));

        StudentData.add(new Student("08","James","男",19));

        StudentData.add(new Student("09","Jordan","男",20));

        StudentData.add(new Student("10","Taylor","女 ",18));
        //查询数据
        StudentData.findAll();
    }
    } 

CourseData类

public class CourseData {
    public static Course course[]=new Course [3];
    public static int realLength=0;

    public void add(    Course cou){
        course [realLength] =cou;
        realLength++;
       // System.out.println("");
    }
    public  void  findAll(){
        for (int i = 0; i < realLength; i++) {
            System.out.println(course[i]);
        }
        System.out.println("当前有"+realLength+"个数据");
    }


    public static void main(String[] args)
    {
        CourseData cd=new CourseData();
        Course c1=new Course("Java",10);
        cd.add(c1);
        Course c2=new Course("数据结构",11);
        cd.add(c2);
        Course c3=new Course("高等数学",12);
        cd.add(c3);
        cd.findAll();
    }
}
讨论数量: 5

引起空指针的原因有可能是StudentData.stus[i].getStuNo()中StudentData.stus[i]没有获取到数据,多加几个if语句判断一下看看

1年前 评论
外层加一个!=null判断
if(StudentData.stus[i].getStuNo() != null){
     if(sid.equals(StudentData.stus[i].getStuNo())){

     }
}
1年前 评论

这样? if (Optional.ofNullable(StudentData.stus[i].getStuNo()).map(sid::equals).orElse(false)) { }

1年前 评论

很简单,如果不想加if判断就使用现成封装好的工具类 Objects.equals() 或者 StringUtils.equals()

1年前 评论

数据存储类构造方法对学生类对象提前初始化

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!