高分悬赏,Java语言怎么实现?
从txt文件中读取10个学生的信息,包括姓名、年龄、语文、数学、英语
然后根据成绩平均分按照从大到小排序输出。
谁给我完整代码,我就采纳谁。
package com.eyecool.abis;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
/**
@author Administrator
*
*/
// 姓名|年龄|语文|数学|英语
// 张三|18|98|99|90
// 李四|19|98|90|87
public class Demo {
public static void main(String[] args) {
// TODO Auto-generated method stub
Demo demo = new Demo();
String path = "E:\demo.txt";
List students = demo.getStudentInfo(path);
// 接下来进行排序
students.sort(new Comparator() {
@Override
public int compare(Object arg0, Object arg1) {
// TODO Auto-generated method stub
Student stu0 = (Student) arg0;
Student stu1 = (Student) arg1;
Double avg0 = stu0.getAverageScore();
Double avg1 = stu1.getAverageScore();
return -avg0.compareTo(avg1);//注意-符合
}
});
// 打印输出
for (Student student : students) {
System.out.println("姓名:" + student.getName() + ",平均分:" + student.getAverageScore());
}
}
public List getStudentInfo(String path) {
File file = new File(path);
BufferedReader br = null;
List students = null;
try {
br = new BufferedReader(new FileReader(file));// 构造一个BufferedReader类来读取文件
String s = null;
int lineNum = 0;
students = new ArrayList();
while ((s = br.readLine()) != null) {// 使用readLine方法,一次读一行
if (lineNum == 0) {// 姓名|年龄|语文|数学|英语
lineNum++;
continue;
}
Student student = createStudent(s);
students.add(student);
lineNum++;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
return students;
}
public Student createStudent(String s) {
// 此处只考虑严格的数据格式:张三|18|98|99|90,其他的未考虑
String str[] = s.split("\|");
String name = str[0];
String age = str[1];
String chineseScore = str[2];
String matchScore = str[3];
String englishScore = str[4];
Student student = new Student();
student.setName(name);
student.setAge(age);
student.setChineseScore(chineseScore);
student.setMatchScore(matchScore);
student.setEnglishScore(englishScore);
// 计算平均分
List<Double> scores = new ArrayList<Double>();
scores.add(Double.valueOf(chineseScore));
scores.add(Double.valueOf(matchScore));
scores.add(Double.valueOf(englishScore));
student.setAverageScore(countAvg(scores));
return student;
}
public Double countAvg(List scores) {
Double sum = 0.00;
for (Double score : scores) {
sum += score;
}
int size = scores.size();
java.text.DecimalFormat df = new java.text.DecimalFormat("#.00");
return Double.valueOf(df.format(sum / size));
}
public class Student {
public Student() {
}
private String name;
private String age;
private String chineseScore;
private String matchScore;
private String englishScore;
private Double averageScore;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public String getChineseScore() {
return chineseScore;
}
public void setChineseScore(String chineseScore) {
this.chineseScore = chineseScore;
}
public String getMatchScore() {
return matchScore;
}
public void setMatchScore(String matchScore) {
this.matchScore = matchScore;
}
public String getEnglishScore() {
return englishScore;
}
public void setEnglishScore(String englishScore) {
this.englishScore = englishScore;
}
public Double getAverageScore() {
return averageScore;
}
public void setAverageScore(Double averageScore) {
this.averageScore = averageScore;
}
}
}