高分悬赏,Java语言怎么实现?
从txt文件中读取10个学生的信息,包括姓名、年龄、语文、数学、英语
然后根据成绩平均分按照从大到小排序输出。
谁给我完整代码,我就采纳谁。
高分悬赏,缺少下载分别错过!Java语言怎么实现?txt读取问题
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- sanshizhang 2020-02-18 16:13关注
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; }
}
}
解决 无用评论 打赏 举报
悬赏问题
- ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
- ¥15 ubuntu虚拟机打包apk错误
- ¥199 rust编程架构设计的方案 有偿
- ¥15 回答4f系统的像差计算
- ¥15 java如何提取出pdf里的文字?
- ¥100 求三轴之间相互配合画圆以及直线的算法
- ¥100 c语言,请帮蒟蒻写一个题的范例作参考
- ¥15 名为“Product”的列已属于此 DataTable
- ¥15 安卓adb backup备份应用数据失败
- ¥15 eclipse运行项目时遇到的问题