為什么我執行中會拋出NullPointerException,求大神指點
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)
2017-10-06
第三行的第一個單詞去掉,就沒問題
2017-09-22
? public void testSetContains(Student student)
2017-09-06
已自己找到問題。第一個方法里還用的是stu1,沒有傳信息去類屬性student里。