package com.imooc.collection; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Scanner; public class SetTest { public List<Course> coursesToSelect; public SetTest() { coursesToSelect = new ArrayList<Course>(); } public void testAdd() { //创建一个课程对象,并通过调用add方法,添加到备选课程list中。 Course cr1 = new Course("1","数据结构"); coursesToSelect.add(cr1); Course temp = (Course)coursesToSelect.get(0);//对象存入集合都变成Object类型,取出时需要类型转换 // 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); 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.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); } public void testForEach() { System.out.println("有如下课程待选(通过for each访问):"); for (Object obj:coursesToSelect) { Course cr = (Course)obj; System.out.println("课程:"+cr.id+":"+cr.name); } } public void testForEachForSet(Student student) { //打印输出学生所选的课程 for(Course cr:student.courses) { System.out.println("选择了课程:"+cr.id+":"+cr.name); } } public static void main(String[] args) { // TODO Auto-generated method stub SetTest st = new SetTest(); st.testAdd(); st.testForEach(); //创建一个新的学生对象 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:st.coursesToSelect) { if(cr.id.equals(courseID)) { student.courses.add(cr); student.courses.add(cr); } } } st.testForEachForSet(student); } }
代码34行中testAdd()中Course temp4 = (Course)coursesToSelect.get(4);有问题,报错下标越界,因为在获取这个之前只添加了4门课程,下标最多是3.
34行的get()方法里面的4越界了,此时coursesToSelect里面只有4个课程,下标范围为0~3,填4是错的。