请问我的为什么抛出这个错误?求大神指点Exception in thread "main" java.lang.NullPointerException

来源:6-2 学生选课---判断 Set 中课程是否存在

悟能子

2018-05-24 16:18


package xueshengxuanke;


import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

import java.util.Scanner;


public class SetTest {


public List<Course> coursesToSelect;

private Scanner console;

public Student student;

public SetTest(){

coursesToSelect = new ArrayList<Course>();

console = new Scanner(System.in);

}

public void testAdd(){

Course cr1 = new Course("1","数据结构");

coursesToSelect.add(cr1);

//Course temp = (Course)coursesToSelect.get(0);//强制转换将object类型转换成课程类型

//System.out.println("添加了课程:"+temp.getId()+":"+temp.getName());

Course cr2 = new Course("2","C语言");

coursesToSelect.add(0,cr2);

//Course temp2 = (Course)coursesToSelect.get(0);

//System.out.println("添加了课程:"+temp2.getId()+":"+temp2.getName());

//插入课程的另一种方法

Course[] course = {new Course("3","离散数学"),new Course("4","汇编语言")};

coursesToSelect.addAll(Arrays.asList(course));

//Course temp3 =(Course) coursesToSelect.get(3);

//Course temp4 =(Course) coursesToSelect.get(4);

//System.out.println("添加了两门课程:"+temp3.getId()+":"+temp3.getName()+";"+temp4.getId()+":"+temp4.getName());

Course[] course2 = {new Course("5","高等数学"),new Course("6","大学英语")};

coursesToSelect.addAll(2,Arrays.asList(course2));

//Course temp5 = (Course) coursesToSelect.get(2);//set 中元素是无序的,所以会出现溢出错误

//Course temp6 = (Course) coursesToSelect.get(3);

//System.out.println("添加了两门课程:"+temp5.getId()+":"+temp5.getName()+";"+temp6.getId()+":"+temp6.getName());


}

//通过 for each方法访问集合元素

public void testForEach(){

System.out.println("有如下课程带选(通过for each访问):");

for(Object obj:coursesToSelect){

Course cr = (Course)obj;

System.out.println("课程:"+cr.getId()+":"+cr.getName());

}

}

// //测试List的contains方法

// public void testListContains(){

// //取得备选课程序列的第0个元素

// Course course = coursesToSelect.get(0);

// //打印输出coursesToSelected是否包含course对象

// System.out.println("取得课程:"+course.getName());

// System.out.println("备选课程中是否包含课程:"+course.getName()+","+coursesToSelect.contains(course));

// //提示输入课程名称

// System.out.println("请输入课程名称:");

// String name = console.next();

// //创建一个新的课程对象,ID和名称,与course对象完全一样

// Course course2 = new Course();

// course2.setName(name);

// System.out.println("新创建课程:"+course2.getName());

// System.out.println("备选课程中是否包含课程:"+course2.getName()+","+coursesToSelect.contains(course2));

// }

//创建学生对象,并选课

public void createStudentAndSelectCours(){

Student student = new Student("1","小明");

System.out.println("欢迎学生:"+student.getName()+"选课!");

//创建一个Scanner对象,用来接收从键盘输入的课程ID

Scanner console = new Scanner(System.in);

for(int i=0;i<3;i++){

System.out.println("请输入课程ID");

String courseId = console.next();

for(Course cr:coursesToSelect){

if(cr.getId().equals(courseId)){

student.courses.add(cr);

//set中,添加某个对象,无论添加多少次,最终只会保留一个该对象(的引用),并且,保留的是第一次添加的那一个

//set中还可以添加null对象

student.courses.add(cr);//该处可测试set中的对象是不可重复的,无论加多少次只会存不重复的

}}}}

//测试Set的contains方法

public void testSetContains(){

//提示输入课程名称

System.out.println("请输入已选的课程名称:");

String name = console.next();

//创建一个新的课程对象,ID和名称,与course对象完全一样

Course course2 = new Course();

course2.setName(name);

System.out.println("新创建课程:"+course2.getName());

//System.out.println("备选课程中是否包含课程:"+course2.getName());

System.out.println("备选课程中是否包含课程:"+course2.getName()+","+student.courses.contains(course2));

}

public static void main(String[] args) {

// TODO Auto-generated method stub


SetTest st = new SetTest();

st.testAdd();

// st.testListContains();

st.testForEach();

st.createStudentAndSelectCours();

st.testSetContains();

// st.testForEach();

// //创建一个学生对象

// Student student = new Student("1","小明");

// System.out.println("欢迎学生:"+student.getName()+"选课!");

// //创建一个Scanner对象,用来接收从键盘输入的课程ID

// Scanner console = new Scanner(System.in);

//

// for(int i=0;i<3;i++){

// System.out.println("请输入课程ID");

// String courseId = console.next();

// for(Course cr:st.coursesToSelect){

// if(cr.getId().equals(courseId)){

// student.courses.add(cr);

// //set中,添加某个对象,无论添加多少次,最终只会保留一个该对象(的引用),并且,保留的是第一次添加的那一个

// //set中还可以添加null对象

// student.courses.add(cr);//该处可测试set中的对象是不可重复的,无论加多少次只会存不重复的

// }

// }

// }

// st.testForEachForSet(student);

}

public void testForEachForSet(Student student){

//打印输出,学生所选的课程!

System.out.println("共选择了:"+student.courses.size()+"门课程!");

for(Course cr:student.courses){//因为Set是无序的,所以只能是for each循环或者是iterator

System.out.println("选择了课程:"+cr.getId()+":"+cr.getName());

}

}


}


写回答 关注

4回答

  • yyAnn
    2018-06-28 09:23:26

    我也犯了相同的错误,原因在创建学生并选课的方法里面,public void createStudentAndSelectCourses()的第一行代码是student=new Student("1","小明"),而不是Student student=new Student("1","小明"),因为student已经在前面定义过的,是公有属性

  • _何者_
    2018-06-03 22:07:09

    https://img3.mukewang.com/5b13f5e30001967607340133.jpg老师把这里改了,我也是这个错误,你的没有改

  • 慕丝6880543
    2018-05-30 14:29:51

    我的也是报这个错,老师的为什么不报错不知道;

    Student对象没有new在堆中开辟空间;  

    public Student student ;

        public SetTest() {

            this.coursesToselect = new ArrayList<Course>();

            this.console = new Scanner(System.in);

            this.student = new Student();

        }

    还需要在 Student中添加了一个空的构造函数;


  • 慕容7724642
    2018-05-24 21:48:49

    这个问题是出现空指针异常,应该是你在数组中没有添加数据,但你去获取这条数据,你可以把错误贴出来看看。

Java入门第三季

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

409792 学习 · 4340 问题

查看课程

相似问题