对语文成绩排序的方法不能正常排序,老师看一下怎么修改
public void sortChineseByAverage() {
Map<String, Float> score = new HashMap<String, Float>();
Set<String> classNameSet = schoolMap.keySet();
if (classNameSet != null) {
for (String s : classNameSet) {
if (s.equals("主学生列表"))
continue;
float sum = 0.0f;
BanJi banji = schoolMap.get(s);
List<Student> stuList = banji.getStuList();
if (stuList != null) {
Iterator<Student> it = stuList.iterator();
while (it.hasNext())
sum += it.next().getChinese();
float average = sum / stuList.size();
score.put(s, average);
} else
System.out.println("该班级没有学生!");
}
} else
System.out.println("还未添加班级!");
List<Entry<String, Float>> list = new ArrayList<Entry<String, Float>>(score.entrySet());
Collections.sort(list, new Comparator<Entry<String, Float>>() {
@Override
public int compare(Entry<String, Float> o1, Entry<String, Float> o2) {
return new Float(o2.getValue() - o1.getValue()).intValue();
}
});
Iterator<Entry<String, Float>> it = list.iterator();
while (it.hasNext())
System.out.println(it.next().getKey() + ":" + it.next().getValue());
}
public void sortMathByAverage() {
Map<String, Float> score = new HashMap<String, Float>();
Set<String> classNameSet = schoolMap.keySet();
if (classNameSet != null) {
for (String s : classNameSet) {
if (s.equals("主学生列表"))
continue;
float sum = 0.0f;
BanJi banji = schoolMap.get(s);
List<Student> stuList = banji.getStuList();
if (stuList != null) {
for (Student stu : stuList)
sum += stu.getMath();
Float average = sum / stuList.size();
score.put(s, average);
} else
System.out.println("该班级没有学生!");
}
} else
System.out.println("还未添加班级!");
List<Entry<String, Float>> list = new ArrayList<Entry<String, Float>>(score.entrySet());
Collections.sort(list, new Comparator<Entry<String, Float>>() {
@Override
public int compare(Entry<String, Float> o1, Entry<String, Float> o2) {
return o2.getValue().compareTo(o1.getValue());
}
});
for (Entry<String, Float> entry : list)
System.out.println(entry.getKey() + ":" + entry.getValue());
}0
收起
正在回答
2回答
同学你好,这是因为在老师的例子中,循环中只调用了一次it.next()方法,例如如下代码:

而同学的代码中一个循环中使用了两次it.next()方法,就可能造成迭代器越界。it.next()就相当于一个指针,每执行一次next(),指针都会下移一次,比如这时第一个it.next()可能指向一个数据,而再调用一次it.next()就会指向下一个数据,而这时如果没有下一个数据,就会抛出异常。同学的代码如下:

解决方式:需要将it.next()取出的数据先传给一个新的对象,再通过这个对象进行输出。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
1. Java 零基础入门
- 参与学习 人
- 提交作业 3802 份
- 解答问题 11489 个
本阶段带你迈入Java世界,学习Java必备基础知识,基础语法、面向对象思想以及常用工具类的使用。
了解课程

恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星