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

SetTest.java中的add方法有问题

https://img1.sycdn.imooc.com//5cce5827000197fe10300955.jpghttps://img1.sycdn.imooc.com//5cce58a90001f67a12580620.jpg跟着老师打的代码,从ListTest.java复制过来的testAdd()方法后,除了注释system.println.out输出语句,我还注掉了第35行,不然运行后控制台报错,可是我看老师没有注释这一行!只注释了输出语句,为啥呀?这是第一个问题,还有第二个问题,就是我添加的课程,明明是先写的离散数学和汇编语言,后写的高等数学和大学英雄,可是为什么testForEach()方法遍历后,控制台的信息离散数学和汇编语言是排在高等数学和大学英语后面的呢?麻烦会的小伙伴讲一讲哦。谢谢

正在回答

4 回答

coursesToSelect.addAll(2, Arrays.asList(course2));下标你标的是2

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

你添加了4个,到那时这个数字和数组一样都是从0开始的,所以最大的才3

0 回复 有任何疑惑可以回复我~
package imooc.imooc.collection;import java.util.HashSet;import java.util.Set;/** * 学生类 * */public class Student {	private String id;	private String name;	public Set<Course> courses;	public Student(String id, String name) {		this.id = id;		this.name = name;		// Set接口,无序不重复		this.courses = new HashSet<Course>();	}	public String getId() {		return id;	}	public void setId(String id) {		this.id = id;	}	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public Set getCourses() {		return courses;	}	public void setCourses(Set courses) {		this.courses = courses;	}}
package imooc.imooc.collection;/** * 课程类 * */public class Course {	private String id;	private String name;	public String getId() {		return id;	}	public void setId(String id) {		this.id = id;	}	public String getName() {		return name;	}	public void setName(String name) {		this.name = name;	}	public Course(String id, String name) {		this.id = id;		this.name = name;	}	public Course() {	}}
package imooc.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 cr2 = new Course("2", "C语言");		coursesToSelect.add(0, cr2);		Course[] course = { new Course("3", "离散数学"), new Course("4", "汇编语言") };		coursesToSelect.addAll(Arrays.asList(course));		Course[] course2 = { new Course("5", "高等数学"), new Course("6", "大学英语") };		coursesToSelect.addAll(2, Arrays.asList(course2));	}	public void testForeach() {		for (Object obj : coursesToSelect) {			Course cr = (Course) obj;			System.out.println("课程:" + cr.getId() + ":" + cr.getName());		}	}	public void testForEachForSet(Student student) {		System.out.println("共选择了" + student.courses.size() + "门课程");		// 打印输出,学生所选的课程!		for (Course cr : student.courses) {			System.out.println("选了课程:" + cr.getId() + ":" + cr.getName());		}	}	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.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					* Set中,可以添加null 					*/					//student.courses.add(cr);				}			}		}		// 打印输出,学生所选的课程!		st.testForEachForSet(student);	}}


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

数组下标越界了,0~3,位置是0,1,2,3,一共四个,哪有4,只有到3

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

观小呆 提问者

哦哦。这个我知道了,但是我并没有看到老师改了这里,难道是偷偷的改掉了???还有!我并没用到set的时候,我只是把课程放进了list中,然后遍历,那么为什么遍历是无序的?怎么不是按照我放入list中的代码顺序遍历出来的呢?
2019-05-05 回复 有任何疑惑可以回复我~
#2

AinyG 回复 观小呆 提问者

程序放出来,不然不知道是什么问题
2019-05-05 回复 有任何疑惑可以回复我~
#3

观小呆 提问者 回复 AinyG

代码是这样的,好奇怪,上传代码不能格式化一下。。。麻烦帮忙看一下了哦,不过我的代码应该是跟老师的一样的,老师的foreach输出课程顺序也不是按照存入课程的顺序位置输出的,不理解。。
2019-05-09 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

SetTest.java中的add方法有问题

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