日期:2014-05-20  浏览次数:20787 次

得到的结果为什么不对呢??
public class Test1 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
/*for(int i=0;i<5;i++){
for(int j=0;j<=i;j++){
System.out.print("*");
}
System.out.println();
}*/

Map<String,Classes> m1 = new HashMap<String,Classes>();
Student s1 = new Student(1,"张三",18);
Student s2 = new Student(2,"李四",20);
Student s3 = new Student(3,"王五",21);

Student s4 = new Student(4,"李磊",19);
Student s5 = new Student(5,"韩梅梅",10);
Student s6 = new Student(6,"露丝",11);


Student s7 = new Student(7,"才衣领",84);
Student s8 = new Student(8,"荣组二",73);
Student s9 = new Student(9,"周结论",97);


Set<Student> ss1 = new HashSet<Student>();
Set<Student> ss2 = new HashSet<Student>();
Set<Student> ss3 = new HashSet<Student>();


ss1.add(s1);
ss1.add(s2);
ss1.add(s3);

ss2.add(s4);
ss2.add(s5);
ss2.add(s6);

ss3.add(s7);
ss3.add(s8);
ss3.add(s9);

Classes c1 = new Classes(1,"物理",ss1);
Classes c2 = new Classes(2,"英文",ss2);
Classes c3 = new Classes(3,"革命",ss3);


m1.put("c1",c1);
m1.put("c2", c2);
m1.put("c3", c3);


Set<Student> set1 = new HashSet<Student>();
//遍历Map
for( Map.Entry<String, Classes> entry:m1.entrySet()){
set1 = entry.getValue().getStudents();
for(Student s:set1){
System.out.println("学生姓名:"+set1.iterator().next().getName());
}
}

}

}

这个很简单,就是把学生放到班级里面,然后把班级放到一个MAP里面,然后遍历这个MAP得到所有的班级,然后再遍历一遍得到所有的学生,班级和学生这两个类比较简单就不写了,但是上面的代码除了错误。得到的结果如下:
学生姓名:李四
学生姓名:李四
学生姓名:李四
学生姓名:露丝
学生姓名:露丝
学生姓名:露丝
学生姓名:荣组二
学生姓名:荣组二
学生姓名:荣组二

这个程序在哪里出错了呢?? 请大家帮忙看一下 谢谢。。。分数没有了

------解决方案--------------------
for(Student s:set1){
System.out.println("学生姓名:"+s.getName());
}


你每次都是取得iterator,然后是.next(),所以每次都是输出第一个的姓名.

或者是
Iterator<Student> it = set1.iterator();
while(it.hasNext()){
System.out.println(it.next().getName());
}
------解决方案--------------------
for(Student s:set1){
System.out.println("学生姓名:"+set1.iterator().next().getName());
}
这段代码的问题 修改方法参照一楼 迭代器和FOR循环不要乱用