那这个呢。。。麻烦了~! 定义一个学生类(姓名、学号、性别、分数)。构建一个向量对象,在里面存放20个学生信息。按照学号找出2009级学生的成绩平均值、2008级学生的平均值,2010级学生的成绩平均值。
追答字数太多了,一次传不上去,你追问吧,我一次给你一点,你自己合一下
public static void main(String... args) {
List data = new ArrayList();
Student s0 = new Student();
s0.setNo("000");
s0.setLevel(2009);
s0.setName("a");
s0.setChengji(100.0);
data.add(s0);
Student s1 = new Student();
s1.setNo("001");
s1.setLevel(2009);
s1.setName("b");
s1.setChengji(99.0);
data.add(s1);
Student s2 = new Student();
s2.setNo("002");
s2.setLevel(2008);
s2.setName("c");
s2.setChengji(98.0);
data.add(s2);
Student s3 = new Student();
s3.setNo("003");
s3.setLevel(2008);
s3.setName("d");
s3.setChengji(97.0);
data.add(s3);
System.out.println("排序前");
show(data);
System.out.println("排序后");
sort(data);
show(data);
// 按照学号找出2009,2008,2007级学生的成绩平均值
// 从学号判断有点麻烦,加个属性level入学年份
data = group(data);
avg(data);
}
嗯嗯嗯
追答这个也是在class Admin中的
private static void avg(List data) {
for (int i = 0; i < data.size(); i++) {
List list = (List) data.get(i);
double sum = 0.0;
int year = 0;
for (int j = 0; j < list.size(); j++) {
Student s = (Student) list.get(j);
sum += s.getChengji();
year = s.getLevel();
}
System.out.println(year + "级平均成绩:" + (sum / list.size()));
}
}
private static List group(List data) {
int oldKey = 0;
List result = new ArrayList();
List list = null;
for (int i = 0; i < data.size(); i++) {
Student s = (Student) data.get(i);
int newKey = s.getLevel();
if (oldKey == newKey) {
if (list == null) {
list = new ArrayList();
}
list.add(s);
} else {
if (list != null) {
result.add(list);
list = null;
}
if (list == null) {
list = new ArrayList();
list.add(s);
}
oldKey = newKey;
}
}
if (list != null) {
result.add(list);
}
return result;
}
private static void sort(List data) {
Collections.sort(data, new Comparator() {
public int compare(Object o1, Object o2) {
Student s1 = (Student) o1;
Student s2 = (Student) o2;
return (int) (s1.getChengji() - s2.getChengji());
}
});
}
private static void show(List data) {
for (int i = 0; i < data.size(); i++) {
System.out.println(data.get(i));
}
}