为了账号安全,请及时绑定邮箱和手机立即绑定

请问我的为什么抛出这个错误?求大神指点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());

}

}


}


正在回答

4 回答

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

7 回复 有任何疑惑可以回复我~

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

3 回复 有任何疑惑可以回复我~

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

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

public Student student ;

    public SetTest() {

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

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

        this.student = new Student();

    }

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


1 回复 有任何疑惑可以回复我~

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

1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信