做这道题的时候,思路不太正确刚开始的时候,想的是把学生对象和总分当做键值对存储,后来发现不对,可以直接让学生类具有比较性,然后复写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;
}
}