1. 程式人生 > >輸入學生的姓名,語文成績,數學成績,英語成績,按照成績進行排序,並放到文字文件中

輸入學生的姓名,語文成績,數學成績,英語成績,按照成績進行排序,並放到文字文件中

鍵盤錄入學生資訊(姓名,語文成績,數學成績,英語成績),按照分數從高到低進行排序。如果總分相等,按照語文成績進行排序;如果語文成績相等,按照數學成績進行排序;如果數學成績相等,按照英語成績進行排序。

分析:

  1. 建立學生類
  2. 建立集合物件
    TreeSet<Student>
  3. 鍵盤錄入學生資訊儲存到集合中
  4. 遍歷集合,把資料寫到文字檔案

程式碼:

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.util.Comparator;
import java.util.Scanner;
import java.util.TreeSet;
public class Test2 {

	public static void main(String[] args) throws Exception {

		//建立集合物件
		TreeSet<Student> ts=new TreeSet<Student>(new MyComparator());
		//鍵盤錄入學生資訊儲存到集合
		for(int x=1;x<=5;x++){
			Scanner sc=new Scanner(System.in);
			System.out.println("請錄入第"+x+"個學生資訊");
			System.out.println("姓名:");
			String name=sc.nextLine();
			System.out.println("語文成績:");
			int chinese=sc.nextInt();
			System.out.println("數學成績:");
			int math=sc.nextInt();
			System.out.println("英語成績:");
			int english=sc.nextInt();
			
			//建立學生物件
			Student s=new Student();
			s.setName(name);
			s.setChinese(chinese);
			s.setMath(math);
			s.setEnglish(english);
			
			//把學生資訊新增到集合中
			ts.add(s);
		}
		//遍歷集合,把資料寫到文字檔案
		BufferedWriter bw=new BufferedWriter(new FileWriter("student.txt"));
		bw.write("學生資訊如下:");
		bw.newLine();
		bw.flush();
		bw.write("姓名,語文成績,數學成績,英語成績:");
		bw.newLine();
		bw.flush();
		for(Student s:ts){
			StringBuilder sb=new StringBuilder();
			sb.append(s.getName());
			sb.append(",");
			sb.append(s.getChinese()).append(",").append(s.getMath()).append(",").append(s.getEnglish());
			bw.write(sb.toString());
			bw.newLine();
			bw.flush();
		}
		//釋放資源
		bw.close();
		System.out.println("學生資訊儲存完畢!");
	}

}
//建立比較器
class MyComparator implements Comparator{

	@Override
	public int compare(Object o1, Object o2) {
		// 強轉
		Student s1=(Student)o1;
		Student s2=(Student)o2;
		//比較總分  
		
		int num=new Integer(s2.getSum()).compareTo(new Integer(s1.getSum()));
		if(num==0){
			//如果總分相同,按照語文比較
			int num1=s2.getChinese()-s1.getChinese();
			if(num1==0){
				//如果語文相同,按照數學比較
				int num2=s2.getMath()-s1.getMath();
				if(num2==0){
					//如果數學相同,按照英語比較
					int num3=s2.getEnglish()-s1.getEnglish();
					if(num3==0){
						//如果英語也相同,按照姓名比較
						int num4=s2.getName().compareTo(s1.getName());
						if(num4==0){
							return 0;
						}else if(num4>0){
							return 1;
						}
					}else if(num3>0){
						return 1;
					}
				}else if(num2>0){
					return 1;
				}
				
			}else if(num1>0){
				return 1;
			}
		}else if(num>0){
			return 1;
		}
		return -1;
	}

	
}
class Student{

	//姓名
	private String name;
	//語文成績
	private int chinese;
	//數學成績
	private int math;
	//英語成績
	private int english;
	
	//建構函式
	public Student() {
		super();
	}
	public Student(String name,int chinese,int math,int english){
		super();
		this.name=name;
		this.chinese=chinese;
		this.math=math;
		this.english=english;
	}
	//基本方法
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getChinese() {
		return chinese;
	}
	public void setChinese(int chinese) {
		this.chinese = chinese;
	}
	public int getMath() {
		return math;
	}
	public void setMath(int math) {
		this.math = math;
	}
	public int getEnglish() {
		return english;
	}
	public void setEnglish(int english) {
		this.english = english;
	}
	public int getSum(){
		return this.chinese+this.math+this.english;
	}	
	
}

執行結果:
在控制檯上錄入五個學生資訊。在當前目錄下,生成了student.txt檔案。檔案中的內容為:在這裡插入圖片描述