一个题目做了好久,java,想说爱你不容易!

来源:互联网 发布:妖夜慌踪 知乎 编辑:程序博客网 时间:2024/05/18 02:52

做这道题的时候,思路不太正确刚开始的时候,想的是把学生对象和总分当做键值对存储,后来发现不对,可以直接让学生类具有比较性,然后复写compareTo方法

直接在compareTo方法中对总分进行比较也可以,如果总分相等那么就比较名字,其实list集合就可以实现,把学生类对象存入到list集合,然后用工具类Collections的

sort方法,调用的是自定义的排序方式,然后将list集合中的学生类对象迭代存入到文件。。。。但是在这里又被卡主了,发现写的是学生类对象的哈希值,mygod,,,

然后参阅了毕老师的例子,发现在学生类中还要复写toString方法,。。。。折腾了好几个小时。。。

其实这道题也没有那么难,只是自己太渣了,反过来再看这道题,考查的知识点有:键盘录入    切割  类型转换(String到Double的转换) 然后就是排序   再然后就是

将集合中的对象写入到文件,   以后一定要注意这个toString了


package com.itheima;import java.io.*;import java.util.ArrayList;import java.util.Collections;import java.util.Scanner;public class Test2 {/*2、 有五个学生,每个学生有3门课(语文、数学、英语)的成绩,写一个程序 * 接收从键盘输入学生的信息,输入格式为:name,30,30,30(姓名,三门课成绩), * 然后把输入的学生信息按总分从高到低的顺序写入到一个名称"stu.txt"文件中。 * 要求:stu.txt文件的格式要比较直观,打开这个文件,就可以很清楚的看到学生的信息。*/public static void main(String[] args) throws IOException {ArrayList<Student> list = new ArrayList<Student>();System.out.println("请输入学生信息,以逗号隔开:");Scanner sc = new Scanner(System.in);while(sc.hasNextLine()){String str = sc.nextLine();if("over".equals(str)){break;}String[] dataIn = str.split(",");//System.out.println(dataIn.length);String name = dataIn[0];//System.out.println(name);double Chinese = Double.parseDouble(dataIn[1]);double Math = Double.parseDouble(dataIn[2]);double English = Double.parseDouble(dataIn[3]);double sum = Chinese+Math+English;Student stu = new Student(name,Chinese,Math,English,sum);//System.out.println("name:"+stu.getName()+" Chinese:"+Chinese+" Math"+Math+" English:"+English+" sum:"+sum);list.add(stu);}sc.close();Collections.sort(list);@SuppressWarnings("resource")FileWriter fw= new FileWriter("e:\\stu.txt");for(Student s : list){fw.write(s.toString()+"\r\n");fw.flush();}}}class Student implements Comparable<Student>{private String name;private double Chinese;private double Math;private double English;private double sum;public Student(String name,double Chinese,double Math,double English,double sum){this.setName(name);this.setChinese(Chinese);this.setMath(Math);this.setEnglish(English);this.setSum(sum);}public String toString(){return "student["+name+", "+Chinese+", "+Math+", "+English+","+"  总分:"+sum+"]";}@Override//覆盖比较方法,如果总成绩相同则按照姓名排序。public int compareTo(Student stu) {int num=0;num = (int) (stu.getSum()-this.getSum());if(num==0){return this.name.compareTo(stu.name);}return num;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getChinese() {return Chinese;}public void setChinese(double chinese) {Chinese = chinese;}public double getMath() {return Math;}public void setMath(double math) {Math = math;}public double getEnglish() {return English;}public void setEnglish(double english) {English = english;}public double getSum() {return sum;}public void setSum(double sum) {this.sum = sum;}}


0 0
原创粉丝点击