1. 程式人生 > >Java集合框架上機練習題

Java集合框架上機練習題

1編寫一個Book類,該類至少有nameprice兩個屬性。該類要實現Comparable介面,在介面的compareTo()方法中規定兩個Book類例項的大小關係為二者的price屬性的大小關係。在主函式中,選擇合適的集合型別存放Book類的若干個物件,然後建立一個新的Book類的物件,並檢查該物件與集合中的哪些物件相等

package org.gerrysu;

import java.util.*;


public class Book implements Comparable{
	String  name;
	int  price;
	public Book(String  name,int  price){
		this.name = name;
		this.price = price;
		 //System.out.println(name.toString());  
	}
	public int compareTo(Object obj) {  
	      Book bk = (Book)obj;  
	      if(bk.price==this.price){  
	     return 1;  
	      }  
	         return 0;  
	      }  

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List<Book> list = new ArrayList<Book>();
		Book bk1 = new Book("java基礎教程",29);
		Book bk2 = new Book("資料庫技術",29);
		Book bk3 = new Book("C++基礎教程",29);
		Book bk4 = new Book("微機原理",39);
		Book bk5 = new Book("作業系統",39);
		Book bk6 = new Book("高數",59);
		Book bk7 = new Book("資料結構",69);
		list.add(bk1);  
		list.add(bk2);  
		list.add(bk3);  
		list.add(bk4); 
		list.add(bk5); 
		list.add(bk6); 
		list.add(bk7); 
		//Iterator<Book> iter = list.iterator();
		Collections.sort(list); 
		System.out.println("輸入:");
		Scanner bookin = new Scanner(System.in);
		String inname = bookin.nextLine();
		int np = bookin.nextInt();
		Book bkn = new Book(inname,np);
		 System.out.println("新書"+bkn.name+"與下列圖書:");
		 Iterator<Book> it = list.iterator();
		 while(it.hasNext()){
			 Book b= it.next();
			 if(b.compareTo(bkn)==1)
				 System.out.println(b.name);
		 }
		 System.out.println("價格相同,具體價格為:"+bk1.price+"元");
	}
	
}

2.編寫一個應用程式,使用者分別從兩個文字框輸入學術的姓名和分數,程式按成績排序將這些學生的姓名和分數顯示在一個文字區中。

package org.gerrysu2;

public class Student implements Comparable{

	 String name;
	 int grade;
	 
	   Student(String name,int grade){
	      this.name = name;
	      this.grade = grade;
	   }
	@Override
	public int compareTo(Object arg0) {
		// TODO Auto-generated method stub
		 if (this.grade > ((Student) arg0).grade) 
			 return -1 ;
		 else if(this.grade == ((Student) arg0).grade)
		 return 0;
		 else return 1; 
	}

}
package org.gerrysu2;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.EmptyBorder;

public class ApplicationTest extends JFrame{
	ArrayList list = new ArrayList<>();
	ApplicationTest(String s){
		init(s);
		setSize(300, 500);    //設定視窗在螢幕上的位置及大小
		setVisible(true);  //設定視窗可見性,必須
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //設定視窗關閉方式,必須

	}
	public void init(String s){
		setTitle(s);
		
		JPanel paneln = new JPanel();
		paneln.setBorder(new EmptyBorder(5, 5, 5, 5));  //
	    this.setContentPane(paneln);  //frame框架放入panel容器
	    paneln.setLayout(new GridLayout(5, 1, 5, 5));  //
	    //建立容器
	    JPanel panel1 = new JPanel();
	    JPanel panel2 = new JPanel();
	    JPanel panel3 = new JPanel();
	
	    
		TextField txt1 = new TextField();
		txt1.setColumns(10);
		TextField txt2 = new TextField();
		txt2.setColumns(10);
		JLabel j1 = new JLabel("姓名");
		JLabel j2 = new JLabel("成績");
		JButton btn1 = new JButton("遞交");
		JButton btn2 = new JButton("排序");
		JTextArea t = new JTextArea(10, 10);
		JScrollPane scrollPane = new JScrollPane(t); //滑動文字框
		panel1.add(j1);
		panel1.add(txt1);
		panel2.add(j2);
		panel2.add(txt2);
		panel3.add(btn1);
		panel3.add(btn2);
		
		paneln.add(panel1);
		paneln.add(panel2);
		paneln.add(panel3);
		paneln.add(scrollPane);
	
		btn1.addActionListener(new ActionListener(){

		
		public void actionPerformed(ActionEvent arg0) {
			// TODO Auto-generated method stub
			String name = txt1.getText();
			int chengji = Integer.parseInt(txt2.getText());//)就是將String字元型別資料轉換為Integer整型資料
			Student stu = new Student(name,chengji);
			if(arg0.getSource()==btn1){
				 t.append(txt1.getText() + ":" + txt2.getText()+"\n" );//用於顯示到TextArea
		          list.add(stu);
			}
		}	
		});
		btn2.addActionListener(new ActionListener(){

			
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				 Collections.sort(list);
				if(arg0.getSource()==btn2){
			Iterator<Student> it = list.iterator();
				while(it.hasNext()){
					Student s = it.next();
					 t.append(s.name + ": " + s.grade + "\n");
				}
				}
			}	
			});
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ApplicationTest apt = new ApplicationTest("學生成績");
	}

}

排序前:

排序後: