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

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值