前言
学校JAVA实验13
一、要求是什么?
学生成绩保存在score3.txt中,输入学生姓名,输出各科成绩和总成绩, 以及各科成绩排名和总成绩的排名。要求:
1) 使用LinkedList<E>或ArrayList<E>泛型类和Iterator<E>迭代器类来
查找成绩和确定成绩排名。参照课本15.2节的内容。
2) 如果没有该学生的成绩,则给出提示信息.
二、思路
- 先构建一个结构体学生,它包含名字成绩和排名
- 然后构建四个比较器,方便之后将链表分别按成绩和总分排序( 不懂比较器的可以点击这里参考我的另外一篇博客)当然下面的代码我也写了注释
- 然后建立文件,判断文件是否可读写
- 接着建立结构体链表
- 将第一行读入舍去,然后接着读入每一行,每读一行建立一个结构体,将名字,成绩读入。然后加入链表
- 然后根据建立的四个比较器,排序四次,每一次排序,都便利一遍链表,将遍历的下标也就是排名,记录下来
- 基本就完成了,然后输入一个名字,遍历一次链表就行,如果存在就输出,不存在就输出对应的话
三代码实现
代码如下
import java.util.*;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.util.Scanner;
public class exex {
public static class Comparator2 implements Comparator<student>{
@Override
public int compare(student b,student a) {
return (int)(a.shu - b.shu);
//注意成绩是浮点数,比较器只能返回int
//并且要注意事后面的减去前面的
//因为比较器是,返回一个正数就让后面的放到前面
//返回一个负数,就让前面的放到后面
//后面的减前面的,如果后面的大,就会返回正数,就会交换
}
}
public static class Comparator1 implements Comparator<student>{
@Override
public int compare(student b,student a) {
return (int)(a.yu - b.yu);
}
}
public static class Comparator3 implements Comparator<student>{
@Override
public int compare(student b,student a) {
return (int)(a.wai - b.wai);
}