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

大神大神来瞅瞅,这是何方妖孽在作怪

按照老师讲的打出来之后,老师的正常运转,我的出现了这样的结果

有如下课程待选(通过for each访问):

课程:2:C语言

课程:1:数据结构

课程:5:高等数学

课程:6:大学英语

课程:3:离散数学

课程:4:汇编语言

欢迎学生:小明选课!

请输入课程ID

2

请输入课程ID

5

请输入课程ID


6

共选择了:3门课程!

选择了课程6:大学英语

选择了课程2:C语言

选择了课程5:高等数学

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

高等数学

新创建课程:高等数学

Exception in thread "main" java.lang.NullPointerException

at com.imooc.cellection.SetTest.testSetContains(SetTest.java:132)

at com.imooc.cellection.SetTest.main(SetTest.java:144)

这是什么情况呀?????

正在回答

5 回答

创建学生对象并选课方法里面看一下是这一句student = new Student("1", "小明");而不是Student student = new Student("1", "小明");这一句么,前一句是对的,后一句是错的

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

太多了 不看了

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

在你的 testSetContains 方法中  System.out.println("备选课程是否包含课程:"+course2.name+","+student.courses.contains(course2));

这句代码中的student 没有进行初始化,就去读取它的courses,肯定会报空指针的错误

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

慕哥8045220 提问者

嗯嗯,谢谢
2017-09-18 回复 有任何疑惑可以回复我~
#2

九尾猿 回复 慕哥8045220 提问者

如果问题解决了,请采纳~谢谢
2017-09-18 回复 有任何疑惑可以回复我~

package com.imooc.cellection;


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(){

//创建一个课程对象,并通过调用add方法,添加到备选课程List中

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

coursesToSelect.add(cr1);

Course temp = (Course)coursesToSelect.get(0);

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

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

coursesToSelect.add(0,cr2);

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

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

// coursesToSelect.add(cr1);

// Course temp0 = (Course)coursesToSelect.get(2);

// System.out.println("添加了课程:"+temp.id+":"+temp0.name);

//以下方法会抛出数组下标越界异常

// Course cr3 = new Course("3","test");

// coursesToSelect.add(4,cr3);

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

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

Course temp3 = (Course)coursesToSelect.get(2);

Course temp4 = (Course)coursesToSelect.get(3);

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

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

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

Course temp5 = (Course)coursesToSelect.get(2);

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

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

}

/*

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

* for each方法是迭代器方法的简便写法

*/

public void testForEach(){

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

for(Object obj:coursesToSelect){

 Course cr = (Course)obj;

 System.out.println("课程:"+cr.id+":"+cr.name);

}

}

/*

* 测试List的contains方法

*/

public void testListContains(){

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

Course course = coursesToSelect.get(0);

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

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

System.out.println("备选课程中是否包含课程:"+course.name+","

   +coursesToSelect.contains(course));  //某个序列是否包含某个对象,如果包含,返回true,否侧返回false!

//提示输入课程名称

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

String name = console.next(); //从键盘中取得输入的字符串

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

// Course course2 = new Course(course.id,course.name);

//创建course2对象

Course course2 = new Course();

//调用无参构造器

course2.name = name;

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

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

//通过indexOf方法来取得某元素的需哦吟位置

if(coursesToSelect.contains(course2)){

System.out.println("课程:"+course2.name+"的索引位置为:"+

      coursesToSelect.indexOf(course2));

}

}

//创建学生对象并选课

public void createStudentAndSelectCours(){

//创建一个学生对象

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

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

//创建一个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.id.equals(courseId)){

student.courses.add(cr); //set.add();和List.add();方法的用法是一样的

/*

* Set中,添加某个对象,无论添加多少次,

* 最终只会保留一个该对象(的引用)

* 并且,保留的是第一次添加的那一个

* Set中是可以添加爱空对象null的

*/

// student.courses.add(null);

// student.courses.add(cr); 

}

}

}

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

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

for(Course c : student.courses){

System.out.println("选择了课程"+c.id+":"+c.name);

}

}


/*

* 测试Set的contains方法

*/

public void testSetContains(){

//提示输入课程名称

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

String name = console.next();

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

Course course2 = new Course();

course2.name = name;

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

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

}

public static void main(String[] args) {

// TODO Auto-generated method stub


SetTest st = new SetTest();//创建一个SetTest方法

st.testAdd();

// st.testListContains();

st.testForEach();


st.createStudentAndSelectCours();

st.testSetContains();

// st.testForEachForSet(student);

}

public void testForEachForSet(Student student){

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

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

for(Course cr:student.courses){

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

}

    }

}

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

请把你的代码贴出来。。。

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

举报

0/150
提交
取消
Java入门第三季
  • 参与学习       409790    人
  • 解答问题       4340    个

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

进入课程

大神大神来瞅瞅,这是何方妖孽在作怪

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