Java作业-输入学生成绩并排序

目标效果:

Java作业-输入学生成绩并排序_第1张图片


代码:

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

/**
 * 编写一个应用程序,用户分别从两个文本框输入学生的姓名和分数,程序按成绩排序将这些学生的姓名和分数显示在一个文本区中。
 * @author Vivinia
 *
 */
public class Student extends JFrame {
	JLabel lName,lScore;      //姓名和成绩标签
	JTextField tName,tScore;    //文本框
	JTextArea taShow;    //用于显示的文本区域
	JButton bSubmit;
	JPanel pan;
	Map studentMap,resultMap;
	//主函数
	public static void main(String[] args) {         
		new Student();
	}
	//构造方法
	public Student() {              
		init();
		click();
	}
	//初始化方法
	public void init() {         
		lName=new JLabel("姓名");    //实例化
		lScore=new JLabel("成绩");
		tName=new JTextField(10);
		tScore=new JTextField(10);
		bSubmit=new JButton("确定");
		pan=new JPanel();
		taShow=new JTextArea();
		pan.add(lName);            //控件组合
		pan.add(tName);
		pan.add(lScore);
		pan.add(tScore);
		pan.add(bSubmit);
		add(pan,BorderLayout.NORTH);     //设置位置
		add(taShow, BorderLayout.CENTER);
		setTitle("统计学生姓名和分数");          //设置窗口基本属性
		setSize(400, 300);
		setVisible(true);
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		validate();
		studentMap=new HashMap();                //非窗口属性初始化
	}
	//确定按钮被点击		
	private void click() {
		bSubmit.addActionListener(new ActionListener() {	   
			@Override
			public void actionPerformed(ActionEvent e) {
				save();
				showMap();
			}		
		});
	}
	//点击按钮调用的保存方法
	private void save() {
		studentMap.put(tName.getText(),tScore.getText());
		resultMap = sortMapByValue(studentMap); //按Value进行排序 
		tName.setText("");         //文本框内容清空
		tScore.setText("");
	}
	//按值排序
	public static Map sortMapByValue(Map map) {
		if (map == null || map.isEmpty()) {
			return null;
		}
		Map sortedMap = new LinkedHashMap();
		List> entryList = new ArrayList>(map.entrySet());   //将元素存入List中,类型为entry
		Collections.sort(entryList, new MapValueComparator());
		Iterator> iter = entryList.iterator();
		Map.Entry tmpEntry = null;
		while (iter.hasNext()) {
			tmpEntry = iter.next();
			sortedMap.put(tmpEntry.getKey(), tmpEntry.getValue());   //将List中的元素遍历出来存入map
		}
		return sortedMap;
	}
	//打印列表
	private void showMap() {
		taShow.setText("");
		for(Map.Entry entry:resultMap.entrySet()) {	
			taShow.append("姓名:"+entry.getKey()+"     成绩:"+entry.getValue()+"\n");
		}		
	}	
}
//比较器类  
class MapValueComparator implements Comparator> {
	public int compare(Entry s1, Entry s2) {
		return s1.getValue().compareTo(s2.getValue());
	}
}

按值排序有点麻烦,思想就是将map中元素遍历出来,使用sort即自定义比较器进行排序,然后重新存入map。


你可能感兴趣的:(Java)