Java-Set测试-学生选课

package collection;

import java.util.*;

public class SetTest {

    public List<Course> coursesToSelect;

    private Scanner console;

    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 cr2 = new Course("2","C语言");
            coursesToSelect.add(cr2);

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

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

        public void testForEach()
        {
            System.out.println("有如下课程待选:");
            for(Object obj:coursesToSelect)
            {
                Course cr = (Course)obj;
                System.out.println("课程:"+cr.id+":"+cr.name);
            }
        }

        //创建一个学生对象并选课
        public void creatStudentAndSelectCourse()
        {                   
            student = new Student("1","小明");
            System.out.println("欢迎学生:"+student.name +"选课");

            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);
                        student.courses.add(cr);
                        //Set中无论添加某对象多少次都只会保留第一个该对象(的引用)
                        //student.courses.add(null);//Set中可添加空对象
                    }
                }
            }
        }

        //Set中的元素是无序且不可重复的 所以没有get方法取出指定位置元素 只能通过foreach或迭代遍历
        public void testForEachForSet(Student st)
        {
            System.out.println("共选择了"+st.courses.size()+"门课程");
            //打印输出学生所选课程
            for(Course cr:st.courses)
            {
                System.out.println("选择了课程:"+cr.id+":"+cr.name);
            }
        }

        //List的contains()/containsAll()方法判断是否包含某元素 返回bool
        public void testListContains()
        {
            //Course course = coursesToSelect.get(0);
            //System.out.println("取得课程:"+course.name);
            //System.out.println("备选课程中是否包含课程:"+course.name+"?"+
            //      coursesToSelect.contains(course));

            //创建一个新课程对象与course对象一致 若未重写contains()中用到的equals()方法则返回false
            //Course course2 = new Course(course.id,course.name);
            //System.out.println("备选课程中是否包含课程:"+course2.name+"?"+
            //      coursesToSelect.contains(course2));


            //提示输入课程名称
            System.out.println("请输入课程名称:");
            String name = console.next();
            Course course2 = new Course();
            course2.name = name;
            System.out.println("备选课程中是否包含课程:"+course2.name+"? "+
                    coursesToSelect.contains(course2));

            //若包含 通过indexOf方法取得索引位置(遍历元素 调用equals()方法)若重复出现 返回第一次出现的位置
            //若是lastIndexOf()方法则从队尾开始遍历 返回末一个的索引位置
            //若未出现 以上两种方法都返回-1
            if(coursesToSelect.contains(course2))
            {
                System.out.println("课程:"+course2.name+"的索引位置为:"+
                        coursesToSelect.indexOf(course2));
            }
        }

        //测试Set的contains方法
        //调用hashCode()方法返回哈希码 哈希码相等的情况下调用equals()
        //因此要重写课程类的hashCode()和equals()
        public void testSetContains()
        {
            System.out.println("请输入课程名称:");
            String name = console.next();
            Course course = new Course();
            course.name = name;
            System.out.println("备选课程中是否包含课程:"+course.name+"? "+
                    student.courses.contains(course));

        }



    public static void main(String[] args) {
        SetTest st = new SetTest();
        st.testAdd();
        st.testListContains();
        st.testForEach();
        st.creatStudentAndSelectCourse();
        st.testSetContains();
    }



}
package collection;
//课程类
public class Course {
    public String id;
    public String name;
    public Course(String id,String name)
    {
        this.id = id;
        this.name = name;
    }

    public Course()
    {

    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (!(obj instanceof Course))
            return false;
        Course other = (Course) obj;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }
}
package collection;

import java.util.*;
//学生类
public class Student implements Comparable<Student> {
    public String id;
    public String name;
    public Set<Course> courses;


    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (!(obj instanceof Student))
            return false;
        Student other = (Student) obj;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }
    public Student(String id,String name)
    {
        this.id = id;
        this.name = name;
        this.courses = new HashSet<Course>();
    }

    //按学生ID排序
    @Override
    public int compareTo(Student o) {
        // 相等返回0 this对象较大返回正值 反之返回负值
        return this.id.compareTo(o.id);
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值