键盘录入学生信息(姓名,语文成绩,数学成绩,英语成绩),按照分数从高到低进行排序。如果总分相等,按照语文成绩进行排序;如果语文成绩相等,按照数学成绩进行排序;如果数学成绩相等,按照英语成绩进行排序。
分析:
- 创建学生类
- 创建集合对象
TreeSet<Student> - 键盘录入学生信息存储到集合中
- 遍历集合,把数据写到文本文件
代码:
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文件。文件中的内容为: