1. 程式人生 > >Java練習之學生選課後續

Java練習之學生選課後續

1.測試List的contains方法

contains方法返回一個boolean,包含返回true,否則返回false.

此外,由於list集合有序,可通過indexOf方法判斷某元素在該list中的位置。如果該元素在list中多次出現,則返回第一次出現的索引位置。而lastindeOf方法返回該元素在list中最後一次出現的位置。如果該元素在list中不存在,返回-1。

重寫course中的equals方法:

public class Course {

	public String id;
	
	public String name;

	public Course()
	{
		
	}
	public Course(String id, String name) {
		super();
		this.id = id;
		this.name = name;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			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;
	}
}

對list進行測試:

package cn.coll.map;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

//備選課程類

public class ListTest {

	public List coursesToSelect; //存放備選課程的List

	public ListTest() {
		
		this.coursesToSelect = new ArrayList();
	}
	
//新增課程
	public void testAdd()
	{
		
		coursesToSelect.add(new Course("1","資料結構"));//建立一個課程物件,並新增到課程list中
	
		coursesToSelect.add(new Course("2","計算機網路"));//建立一個課程物件,並新增到課程list中
		
		Course[] course = { new Course("3","組成原理"),new Course("4","作業系統")};
		
		coursesToSelect.addAll(Arrays.asList(course));
		
	}
	
	/*
	 * 測試list中的contains方法
	 */
	public void testContains()
	{
		//取得備選課程list中的第一個元素
		Course course = (Course)coursesToSelect.get(0);
		
		System.out.println("取得課程:"+course.name);
		
		System.out.println("判斷是否包含該課程:"+course.name+","+coursesToSelect.contains(course));
		
		//新建一個課程物件,和course中的id和name值完全相同
		
		Course course2 = new Course(course.id,course.name);
		
        System.out.println("取得課程:"+course2.name);
		
		System.out.println("判斷是否包含該課程:"+course2.name+","+coursesToSelect.contains(course2));
		
		
	}
	
	/*
	 * 迭代遍歷list集合
	 */
	public void testIterator()
	{
        Iterator it = coursesToSelect.iterator();
		
        System.out.println("通過迭代器訪問集合元素:");
		while(it.hasNext())
		{
			Course cou = (Course)it.next();
			System.out.println(cou.id+","+cou.name);
		}
		
	}
	public void testForEach()
	{
		System.out.println("通過ForEach方法訪問集合元素:");
		for(Object obj : coursesToSelect)
		{
			Course cor = (Course)obj;
			
			System.out.println(cor.id+","+cor.name);
			
		}
	}

	
	 public static void main(String[] args)
	 {
		 ListTest lt = new ListTest();
		 
		 lt.testAdd();
		 lt.testIterator();
		 lt.testContains();
	 }
}

2.測試Set中的contains方法

使用HashSet,要複寫equals和hashcode方法

//在course中複寫hashcode和equals方法
@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 (getClass() != obj.getClass())
			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;
	}
public class SetTest {

	public List<Course> coursesToSelect;
	
	private Scanner console;
	
	public SetTest()
	{
		coursesToSelect = new ArrayList<Course>();
		this.console = new Scanner(System.in);
		
	}
	
	public void courseAdd()
	{
		coursesToSelect.add(new Course("1","資料結構"));
		
		coursesToSelect.add(new Course("2","高等數學"));
		
		coursesToSelect.add(new Course("3","線型代數"));
	}
	
	public void testIterator()
	{
		Iterator<Course> it = coursesToSelect.iterator();
		while(it.hasNext())
		{
			Course cou = it.next();
			
			System.out.println(cou.id+","+cou.name);
			
		}
	
	}
	/*
	 * 建立新的學生物件並選課
	 */
	public void creatAndSele()
	{
		//建立學生物件
		
				Student stu = new Student("001","wangcai");
				
				System.out.println("歡迎"+stu.name+"進入選課系統!");
				
				//建立Scanner物件,接收從鍵盤輸入的課程ID
				
				Scanner console = new Scanner(System.in);
				
				//將鍵盤輸入的課程ID和備選課程中的ID進行對比,如果存在該課程,就加入到學生的選課中
				
				for(int i = 0 ; i <3; i++)
				{
					System.out.println("請輸入課程ID:");
					String courseID = console.next();
					for(Course cr: coursesToSelect)
					{
						if(cr.id.equals(courseID))
						{
							stu.courses.add(cr);
						}
					}
				}
				
				System.out.println("您所選的課程為:");
				//列印輸出學生所選課程
				for(Course cr : stu.courses)
				{
					System.out.println(cr.id+","+cr.name);
				}
				System.out.println("您 一共選擇了"+stu.courses.size()+"門課程");
	/*
	 * 測試set中的contains方法
	 */
	
		System.out.println("請輸入要查詢的課程名稱:");
		String name =  console.next();
		
		Course course = new Course();
		
		course.name = name;
		
		System.out.println("您要查詢的課程名稱是:"+course.name);
		
		System.out.println("course中是否包含該課程:"+stu.courses.contains(course));
	}
	
	
	public static void main(String[] args) 
	{
		SetTest st = new SetTest();
		
		st.courseAdd();
		
		System.out.println("可選的課程有:");
		
		st.testIterator();
		
		st.creatAndSele();
		
	}

}

3.Collections.sort方法

使用Collection的sort方法,對list的Integer和String,以及其他型別(Student)泛型進行排序。

對Integer和String型別的資料進行排序:

public class CollectionsTest {
	
	/*
	 * 對List中的Integer泛型進行排序,
	 * 建立一個長度為10,資料在100以內的隨機數的list
	 * 呼叫sort方法進行排序
	 */
    public void testSortInt()
    {
    	List<Integer> intList = new ArrayList<Integer>();
    	
    	//生成隨機數
    	Random random = new Random();
    	
    	Integer k;
    	
    	for(int i = 0 ; i < 10 ; i ++)
    	{
    		//確保每次生成的隨機數都不相同
    		do {
    			k = random.nextInt(100);
    		}while(intList.contains(k));
    		
    		intList.add(k);
    	}
    	Iterator it = intList.iterator();
    	System.out.println("排序之前");
    	while(it.hasNext())
    	{
    		System.out.println(it.next());
    	}
    	
    	Collections.sort(intList);
    	
    	System.out.println("排序之後");
    	
    	for(Integer integer: intList)
    	{
    		System.out.println(integer);
    	}
    }
	
	public void stringSort()
	{
		List<String> strList = new ArrayList<String>();
		
		strList.add("taobao");
		
		strList.add("tianmao");
		
		strList.add("alibaba");
		System.out.println("排序之前");
		for(String str : strList)
		{
			System.out.println(str);
		}
		Collections.sort(strList);
		System.out.println("排序之後");
		for(String str : strList)
		{
			System.out.println(str);
		}
	}
		
	public static void main(String[] args) {
		
		CollectionsTest cot = new CollectionsTest();
		
		cot.testSortInt();
		
		cot.stringSort();
		
	}

}

 

4.使用Comparable和Comparator對自定義型別資料進行排序

Comparable介面:其實現類要實現compareTo方法,預設使用自然排序。

Comparator介面:其實現類要實現compare方法,不預設比較規則。

實現comparab介面,複寫student的compareTo方法:

//在Student類中實現Comparable介面,並複寫compareTo方法
@Override
	public int compareTo(Student o) {
		
		return this.id.compareTo(o.id);
	}

//建立StuComparator類,複寫compare介面
public class StuComparator implements Comparator<Student> {

	@Override
	public int compare(Student o1, Student o2) {
		
		return o1.name.compareTo(o2.name);
	}
	
}

//在CollectionTest類中實現Student比較

public void stuSort()
	{
		List<Student> stuList = new ArrayList<Student>();
		
		Random random = new Random();
		
		stuList.add(new Student(random.nextInt(100)+" ","wangxi"));
		
		stuList.add(new Student(random.nextInt(100)+" ","zhaocai"));
		
		stuList.add(new Student(random.nextInt(100)+" ","jinbao"));
		
		System.out.println("排序前");
		
		for(Student stu: stuList)
		{
			System.out.println(stu.name);
		}
		
		System.out.println("使用Comparable介面排序後");
		Collections.sort(stuList);
		for(Student stu : stuList)
		{
			System.out.println(stu.id+","+stu.name);
		}
		
		System.out.println("使用Comparator介面排序後");
		
		Collections.sort(stuList,new StuComparator());
		for(Student stu : stuList)
		{
			System.out.println(stu.id+","+stu.name);
		}		
	}