Java案例——从集合到文件并排序(末尾有问题,请各位指导)
2022/4/11 14:13:14
本文主要是介绍Java案例——从集合到文件并排序(末尾有问题,请各位指导),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
需求:键盘录入5个学生信息,要求按照成绩总分从高到低写入到文本
格式:姓名,语文成绩,数学成绩,英语成绩
分析:
1、定义学生类
2.创建TreeSet集合,通过比较器Comparator进行排序
3.键盘录入学生数据
4、创建学生对象,将键盘录入的数据对应赋值给学生对象的成员变量
5、把学生对象添加到TreeSet集合
6、创建字符缓冲输出流对象
7、遍历集合,得到每一个学生对象
8、把学生对象的数据拼接成指定格式的字符串
9、调用字符缓冲输出流对象的方法写入数据
10、释放资源
Student类
package Demo041101; public class Student { private String name; private int YwScore; private int MathScore; private int EnglishScore; public Student(){} public Student(String name, int ywScore, int mathScore, int englishScore) { this.name = name; YwScore = ywScore; MathScore = mathScore; EnglishScore = englishScore; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getYwScore() { return YwScore; } public void setYwScore(int ywScore) { YwScore = ywScore; } public int getMathScore() { return MathScore; } public void setMathScore(int mathScore) { MathScore = mathScore; } public int getEnglishScore() { return EnglishScore; } public void setEnglishScore(int englishScore) { EnglishScore = englishScore; } //求和 public int getSum(){ return this.getYwScore()+this.getEnglishScore()+this.getMathScore(); } }
StudentDemo类
package Demo041101; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.util.Comparator; import java.util.Scanner; import java.util.TreeSet; /* * 1、定义学生类 2.创建TreeSet集合,通过比较器Comparator进行排序 3.键盘录入学生数据 4、创建学生对象,将键盘录入的数据对应赋值给学生对象的成员变量 5、把学生对象添加到TreeSet集合 6、创建字符缓冲输出流对象 7、遍历集合,得到每一个学生对象 8、把学生对象的数据拼接成指定格式的字符串 9、调用字符缓冲输出流对象的方法写入数据 10、释放资源*/ public class StudentDemo { public static void main(String[] args) throws IOException { //创建TreeSet集合,通过比较器Comparator进行排序 TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() { @Override public int compare(Student s1, Student s2) { //先按照总成绩排序 int num = s2.getSum() - s1.getSum(); //总成绩相同的按照语文成绩排序 int num1 = num == 0 ? s1.getYwScore() - s2.getYwScore() : num; //语文成绩相同的按照数学成绩排序 int num2 = num1 == 0 ? s1.getMathScore() - s2.getMathScore() : num1; //数学成绩相同的按照英语成绩排序 int num3 = num2 == 0 ? s1.getEnglishScore() - s2.getEnglishScore() : num2; //都相同的判断是否是同一个人 int num4 = num3 == 0 ? s1.getName().compareTo(s2.getName()) : num3; return num4; } }); //键盘录入学生数据 Scanner sc = new Scanner(System.in); System.out.println("请输入学生总人数"); int i = sc.nextInt(); for (int m = 1; m <= i; m++) { sc=new Scanner(System.in);//为什么这一行注释掉会出错?不让输入姓名? System.out.println("请输入第" + m + "个学生信息"); System.out.println("请输入姓名:"); String nn = sc.nextLine(); System.out.println("请输入语文成绩"); int yw = sc.nextInt(); System.out.println("请输入数学成绩"); int math = sc.nextInt(); System.out.println("请输入学生的英语成绩"); int yy = sc.nextInt(); Student s = new Student(); s.setName(nn); s.setYwScore(yw); s.setMathScore(math); s.setEnglishScore(yy); //把学生对象添加到TreeSet集合 ts.add(s); } //创建字符缓冲输出流对象 BufferedWriter bw = new BufferedWriter(new FileWriter("E:\\abc.txt")); //遍历集合,得到每一个学生对象 for (Student s3 : ts) { //把学生对象的数据拼接成指定格式的字符串 StringBuilder sb = new StringBuilder(); sb.append(s3.getName()).append(",").append(s3.getYwScore()).append(",").append(s3.getMathScore()).append(",").append(s3.getEnglishScore()).append(",").append(s3.getSum()); //调用字符缓冲输出流对象的方法写入数据 bw.write(sb.toString()); //换行 bw.newLine(); //刷新缓冲区 bw.flush(); } //释放资源 bw.close(); } }
问题1:
在测试中发现这样一个问题但是找不到原因:
在循环输入学生信息时,如果循环中没有 sc=new Scanner(System.in);这行代码它会不让你在控制台输入学生的姓名?
很奇怪也不报错,没找到原因,请各位知道的指导一下!
问题2:
运行后提示线程流已关闭,经排查后发现将释放资源操作放入了循环中,已解决。
这篇关于Java案例——从集合到文件并排序(末尾有问题,请各位指导)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南