这道题怎么做呢?刚学到集合

lcsdss 2014-08-06 07:15:05


网上有个人这么给我写的,可是我还是不太懂


他的第65行是做什么的啊?好烦,map里面怎么又放个List 啊?直接放Double不行嘛。好多好多的疑问,有点伤心了。给我源码我都看不懂。
...全文
245 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lcsdss 2014-08-08
  • 打赏
  • 举报
回复
6L的我真没看懂啊
EvanJim 2014-08-06
  • 打赏
  • 举报
回复
package cn.itcast.avg;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class AvgAndSunDemo {
public static void main(String[] args) {
//数据准备
List list = new ArrayList<Student>();
list.add(new Student("Tom",18,100.0,"class05"));
list.add(new Student("Jerry",22,70.0,"class04"));
list.add(new Student("Owen",25,90.0,"class05"));
list.add(new Student("Jim",30,80.0,"class05"));
list.add(new Student("Steve",28,66.0,"class06"));
list.add(new Student("Kevin",24,100.0,"class04"));

int ageSum = 0;
double avgAge = 0;
Map<String, Double> classMap = new HashMap<String, Double>();
Map<String, Integer> classMap2 = new HashMap<String, Integer>();

for(int i = 0; i < list.size(); i++){
//System.out.println(list.get(i));
Student student = (Student) list.get(i);
ageSum += student.getAge();//年龄总数
Double beforeScore = classMap.put(student.getClassNum(),student.getScore());//map特性:返回覆盖前一个对象的value
Integer beforeScore2 = classMap2.put(student.getClassNum(),1);
if(beforeScore != null){
classMap.put(student.getClassNum(),(student.getScore()+beforeScore));
classMap2.put(student.getClassNum(),beforeScore2+1);
}
//System.out.println(beforeScore);
}

avgAge = ageSum / list.size();
System.out.println("年龄总数:" + ageSum + " 平均年龄:" + avgAge);
//System.out.println(classMap.size());

Set<String> classSet = classMap.keySet();
for (String keyStr : classSet) {
System.out.println(keyStr + ":" + " 总分:" + classMap.get(keyStr) +
" 人数:" + classMap2.get(keyStr) +
" 平均分:" + classMap.get(keyStr)/classMap2.get(keyStr));
}
}
}

package cn.itcast.avg;

public class Student {

public String name;//姓名

public Integer age;//年龄

public Double score;//分数

public String classNum;//班级ID


public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Integer getAge() {
return age;
}

public void setAge(Integer age) {
this.age = age;
}

public Double getScore() {
return score;
}

public void setScore(Double score) {
this.score = score;
}

public String getClassNum() {
return classNum;
}

public void setClassNum(String classNum) {
this.classNum = classNum;
}

@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", score=" + score
+ ", classNum=" + classNum + "]";
}

public Student() {
}

public Student(String name, Integer age, Double score, String classNum) {
super();
this.name = name;
this.age = age;
this.score = score;
this.classNum = classNum;
}

}



运行结果:
可乐罐 2014-08-06
  • 打赏
  • 举报
回复
每个班一个List;全部班用HashMap保存(Key是班号); 所有的统计都从这个HashMap对象中获取原始数据; 楼主去看下Map类的概念,就能理解代码在干嘛了
lliiqiang 2014-08-06
  • 打赏
  • 举报
回复
年龄平均数容易,求年龄总和/学生个数. 分班求平均分,需要用HashMap通过key把学生根据班级分到多个List中,然后分别求每个list的平均分.
zy_think123 2014-08-06
  • 打赏
  • 举报
回复
直接重新写一个嘛,比看它的代码简单多了, 求平均分:遍历集合中的每个学生对象,将相同班级分数累加然后除以班级人数 求平均年龄:遍历集合,得到所有学生的年龄,累加然后除以list.size();
skgary 2014-08-06
  • 打赏
  • 举报
回复
66行应该是构建了一个班号 =》这个班分数list的的hashmap 然后你应该两层的循环,外层遍历一下这个hashmap,内层遍历list,计算平均分;
skgary 2014-08-06
  • 打赏
  • 举报
回复
其实这段代码并没有算出每个班的平均分。
豫让_______ 2014-08-06
  • 打赏
  • 举报
回复
这个就是循环累加吧。。。不难吧
静山晚风 2014-08-06
  • 打赏
  • 举报
回复
这个不难啊。

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧