此博客主要是对学习过的只是自己进行归纳总结,便于日后复习,如果有错误的地方,欢迎指正。
需求:
学生成绩信息,里面包含的字段有:班级、学号、姓名、语文成绩、数学成绩、英语成绩
示例:
班级 学号 姓名 语文 数学 英语
1307 7026 邝卓男 95 88 98
中间以制表符分隔
问题1:求每个学生的总分和平均分,并按照总分降序排序(使用自定义类)
问题2:求每个班级的总分最高的前5个学生,将不同班级的结果输出到不同的文件中
自定义类
求每个学生的总分和平均分,并按照总分降序排序
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import org.apache.hadoop.io.WritableComparable;
/**
* 此类为自定义学生类
* 学生信息包括:班级 className、学号 id、姓名 name、
* 语文成绩 chinese、数学成绩 math、英语成绩 english
* 求出学生总分数和平均分,并按照总分降序排序
* @author 胡嘉亮
*
*/
public class Student implements WritableComparable<Student> {
private String className; //班级
private String id; //学号
private String name; //姓名
private int chinese; //语文成绩
private int math; //数学成绩
private int english; //英语成绩
private int sum; //总分
private double avg; //平均分
public Student() {
}
/**
* 定义有参构造,在创建对象时进行初始化,计算出总分和平均分
* @param className
* @param id
* @param name
* @param chinese
* @param math
* @param english
*/
public Student(String className,String id,String name,int chinese,int math,int english){
this.className=className;
this.id=id;
this.name=name;
this.chinese=chinese;
this.math=math;
this.english=english;
this.sum=chinese+math+english;
this.avg=sum*1.0/3;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getChinese() {
return chinese;
}
public void setChinese(int chinese) {
this.chinese = chinese;
}
public int getMath() {
return math;
}
public void setMath(int math) {
this.math = math;
}
public int getEnglish() {
return english;
}
public void setEnglish(int english) {
this.english = english;
}
public int getSum() {
return sum;
}
public void setSum(int sum) {
this.sum = sum;
}
public double getAvg() {
return avg;
}
public void setAvg(double avg) {
this.avg = avg;
}
@Override
public void readFields(DataInput in) throws IOException {
this.className=in.readUTF();
this.id=in.readUTF();
this.name=in.readUTF();
this.chinese=in.readInt();
this.math=in.readInt();
this.english=in.readInt();
this.sum=in.readInt();
this.avg=in.readDouble();
}
@Override
public void write(DataOutput out) throws IOException {
out.writeUTF(className);
out.writeUTF(id);
out.writeUTF(name);
out.writeInt(chinese);
out.writeInt(math);
out.writeInt(english);
out.writeInt(sum);
out.writeDouble