为什么我执行中会抛出NullPointerException,求大神指点

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

Youngkos

2017-09-06 23:25

public void creatStudentAndSelectCourse(){
		//创建一个学生对象
		Student stu1 = new Student("1","小明");
		System.out.println("欢迎:"+stu1.name+"选课!");
		Scanner input = new Scanner(System.in);  
		for(int i = 0 ; i<3 ; i++){
			System.out.println("请输入课程ID");
			String courseID = input.next();
			for(Course c : coursesToSelect){
				if(c.id.equals(courseID)){
					stu1.courses.add(c); 
					/**
					 * Set中,添加某种对象,无论添加多少次
					 * 最终只会保留一个该对象(的引用)
					 * 并且,保留的是第一次添加的那一个
					 */
				}
			}
		}	
		System.out.println("共选择了:"+stu1.courses.size()+"门课程");
		//打印输出学生所选的课程
		for(Course c : stu1.courses){
			System.out.println("选择了课程"+c.id+":"+c.name);
			}
	}
	/*
	 * */
	public void testSetContains(){
		//t提示输入课程名称
		System.out.println("请输入学生已选的课程名称");
		String name = console.next();
		//创建一个课程对象,ID和名称,并判断备选课程中是否包含课程
		Course course2 = new Course();
		course2.name= name;
		System.out.println("取得课程:"+course2.name);
		System.out.println("备选课程中是否包含此课程"+student.courses.contains(course2));
		
	}
	
	public static void main(String[] args) {
		SetTest st = new SetTest();
		st.testAdd();
		
		st.testForEach();
//		st.testListContains();
//		st.testForEach();
		
		st.creatStudentAndSelectCourse();
		st.testSetContains();

		}



执行结果

有如下课程待选(通过For each来遍历):

课程:2:C语言

课程:1:数据结构

课程:5:高等数学 

课程:6:大学英语

课程:3:离散数学 

课程:4:汇编语言

欢迎:小明选课!

请输入课程ID

2

请输入课程ID

5

请输入课程ID

6

共选择了:3门课程

选择了课程5:高等数学 

选择了课程6:大学英语

选择了课程2:C语言

请输入学生已选的课程名称

高等数学

取得课程:高等数学

Exception in thread "main" java.lang.NullPointerException

at com.collection_map_demon.SetTest.testSetContains(SetTest.java:90)

at com.collection_map_demon.SetTest.main(SetTest.java:103)


写回答 关注

3回答

  • IE游荡者
    2017-10-06 15:42:07

    第三行的第一个单词去掉,就没问题

    qq_木_3...

    和之后前来学习的人分享一下自己的理解,第三行Student student 重新定义了一个与成员变量同名的局部变量,所以在这个方法里使用的是局部变量,所作的添加赋值操作给了它,而类里面的student并没有接受到添加(为空),所以再调用student.courses.contains()时student.courses为空,所以出现异常。

    2018-08-01 15:50:55

    共 1 条回复 >

  • Aspirine
    2017-09-22 11:30:07

      public void testSetContains(Student student)

  • Youngkos
    2017-09-06 23:32:50

    已自己找到问题。第一个方法里还用的是stu1,没有传信息去类属性student里。

    悟能子

    我也遇到了这样的问题,请问具体是怎么改的?

    2018-05-17 17:11:42

    共 1 条回复 >

Java入门第三季

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

409792 学习 · 4340 问题

查看课程

相似问题