請問我的為什么拋出這個錯誤?求大神指點Exception in thread "main" java.lang.NullPointerException
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());
}
}
}
2018-06-28
我也犯了相同的錯誤,原因在創建學生并選課的方法里面,public void createStudentAndSelectCourses()的第一行代碼是student=new Student("1","小明"),而不是Student?student=new Student("1","小明"),因為student已經在前面定義過的,是公有屬性
2018-06-03
2018-05-30
我的也是報這個錯,老師的為什么不報錯不知道;
Student對象沒有new在堆中開辟空間;??
public Student student ;
? ? public SetTest() {
? ? ? ? this.coursesToselect = new ArrayList<Course>();
? ? ? ? this.console = new Scanner(System.in);
? ? ? ? this.student = new Student();
? ? }
還需要在 Student中添加了一個空的構造函數;
2018-05-24
這個問題是出現空指針異常,應該是你在數組中沒有添加數據,但你去獲取這條數據,你可以把錯誤貼出來看看。