A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 欧阳博 中级黑马   /  2012-3-24 09:46  /  1658 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. package test5;

  2. import java.util.HashMap;
  3. import java.util.HashSet;
  4. import java.util.Map;
  5. import java.util.Set;

  6. public class Test1 {

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

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

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

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

  26.                 Set<Student> ss1 = new HashSet<Student>();
  27.                 Set<Student> ss2 = new HashSet<Student>();
  28.                 Set<Student> ss3 = new HashSet<Student>();

  29.                 ss1.add(s1);
  30.                 ss1.add(s2);
  31.                 ss1.add(s3);

  32.                 ss2.add(s4);
  33.                 ss2.add(s5);
  34.                 ss2.add(s6);

  35.                 ss3.add(s7);
  36.                 ss3.add(s8);
  37.                 ss3.add(s9);

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

  41.                 m1.put("c1", c1);
  42.                 m1.put("c2", c2);
  43.                 m1.put("c3", c3);

  44.                 Set<Student> set1 = new HashSet<Student>();
  45.                 // 遍历Map
  46.                 for (Map.Entry<String,Classes> entry : m1.entrySet()) {
  47.                         set1 = entry.getValue().getStudents();
  48.                         for (Student s : set1) {
  49.                                 System.out.println("学生姓名:" + set1.iterator().next().getName());
  50.                         }
  51.                 }
  52.         }
  53. }
复制代码
这个很简单,就是把学生放到班级里面,然后把班级放到一个MAP里面,然后遍历这个MAP得到所有的班级,然后再遍历一遍得到所有的学生,班级Classes和学生Student这两个类比较简单就不写了,但是上面的代码除了错误。得到的结果如下:
学生姓名:李磊
学生姓名:李磊
学生姓名:李磊
学生姓名:荣组二
学生姓名:荣组二
学生姓名:荣组二
学生姓名:李四
学生姓名:李四
学生姓名:李四

这个程序在哪里出错了呢?? 请大家帮忙看一下

5 个回复

倒序浏览
个人感觉是下面的代码有问题:
for (Student s : set1) {
                                System.out.println("学生姓名:" + set1.iterator().next().getName()); //建议修改为:System.out.println("学生姓名:" +s.getName());
                       }
另外,建议将Student类和Classes类代码也贴上,有助于问题解决.
回复 使用道具 举报
刘基军 发表于 2012-3-24 10:14
个人感觉是下面的代码有问题:
for (Student s : set1) {
                                System.out.prin ...

对对,就是这里有问题,汗.....我眼花了,便利集合了,当然是用它的s了。  谢谢刘哥,
回复 使用道具 举报
for (Student s : set1) {

              System.out.println("学生姓名:" + set1.iterator().next().getName());
  }

既然是用增强for循环,为何不用s调用getName()这个方法呢?
回复 使用道具 举报
张一凡 发表于 2012-3-24 10:27
for (Student s : set1) {

              System.out.println("学生姓名:" + set1.iterator().next().ge ...

嗯,谢谢。
回复 使用道具 举报
外部for每循环一次,内部for (Student s : set1)循环3次,
内部for每循环一次, set1 集合就迭代一次,每次都迭代第一个元素.

你的内部for循环只起到循环次数的作用了 并没有用到 变量s每次所指向的学生  

把内部for中的迭代改成 s.getName()就可以了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马