问答详情
源自:4-11 学生选课---通过 Set 集合管理课程

输出不是无序,输入2,1,4 输出也是2,1,4 一直都是,代码都在了,帮忙看看什么毛病,谢谢


package com.imooc.collection;


import java.util.HashSet;

import java.util.Set;


/**

 * 学生类

 * @author 王阳

 *

 */

public class Student {

public String id;

public String name;

public Set<Course> courses;

public Student(String id,String name) {

this.id = id;

this.name = name;

this.courses = new HashSet<Course>();

}

}

 

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

// TODO Auto-generated constructor stub 

coursesToSelect = new ArrayList<Course>();

}

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);

// // Course temp3 = (Course)coursesToSelect.get(1);

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

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

// coursesToSelect.add(cr1);

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

// System.out.println("添加了课程:"+temp0.id+":"+temp0.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", "Java语言"),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方法访问几何元素

* @param args

*/

public void testForEach() {

System.out.println("有如下课程待选(通过foreach方法):");

for(Object obj:coursesToSelect) {

Course cr = (Course)obj;

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

}

}

public void testForEachSet(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);

}

}

}

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

st.testForEachSet(student);

}


}


提问者:慕斯卡4449224 2019-01-22 23:42

个回答

  • 慕码人2851768
    2019-03-18 20:12:57

    楼上正解

  • 北顾岛城
    2019-02-17 18:16:16

    建议先不要纠结这个问题,知道Set是无序即可,因为其内部实现原理是哈希表,需要数据结构的知识

  • 慕函数1299684
    2019-02-11 17:02:43

    我也是。。。


  • qq_慕仔7282226
    2019-01-26 13:07:47

    我也一样,程序运行输出顺序就是和输入顺序永远相同。

    但是,用断点调试的时候输出的顺序就是无序的了!