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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Fightingforever 中级黑马   /  2014-11-3 15:47  /  1371 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.util.*;
  2. class Student
  3. {
  4.         private String name;
  5.         private int age;
  6.         Student(String name,int age)
  7.         {
  8.                 this.name=name;
  9.                 this.age=age;
  10.                 }
  11.                
  12.         public String getName()
  13.         {
  14.                 return name;
  15.                 }
  16.        
  17.         public int getAge()
  18.         {
  19.                 return age;
  20.                 }
  21.         }
  22.        
  23. class StudentDemo
  24. {
  25.         public static void main(String[] args)
  26.         {
  27.                 TreeSet<Student> ts=new TreeSet<Student>(new MyCompare());
  28.                
  29.                 ts.add(new Student("zhangsan01",20));
  30.                 ts.add(new Student("zhangsan02",25));
  31.                 ts.add(new Student("zhangsan03",21));
  32.                 ts.add(new Student("lisi",22));
  33.                  

  34.                 Iterator<Student> it=ts.iterator();
  35.                
  36.                 while(it.hasNext())
  37.                 {
  38.                         System.out.println(it.next().getName()+"....."+it.next().getAge());
  39.                         }
  40.                 }
  41.         }
  42.        
  43. class MyCompare implements Comparator<Student>
  44. {
  45.         public int compare(Student o1,Student o2)
  46.         {
  47.                 int num=new Integer(o1.getAge()).compareTo(new Integer(o2.getAge()));
  48.                 if(num==0)
  49.                         return o1.getName().compareTo(o2.getName());
  50.                 return num;
  51.                 }
  52.         }

  53. 运行的结果是:
  54. zhangsan01.....21
  55. lisi.....25
  56. 但我明明写的是四个人呀!为什么只存了两个
复制代码


评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 淡定

查看全部评分

14 个回复

倒序浏览
楼主很着急!
回复 使用道具 举报
  1.        while(it.hasNext())
  2.                 {
  3.                         System.out.println(it.next().getName()+"....."+it.next().getAge());
  4.                         }
  5.                 }
复制代码

楼主你的代码其他出没有错误,是迭代器迭代时出现了错误。
不知道楼主有没有发现,输出的名字和年龄,不是同一个人的。
System.out.println(it.next().getName()+"....."+it.next().getAge());
这里的it.next().getName()中的it.next()是第一个元素,it.next().getAge()中的it.next()是下一个元素的, 这也是迭代器中的特殊情况。具体为什么去温习下视频吧,我水平有限。
可以改为Student s = it.next(); 然后用s.getName()和s.getAge()来取值。

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

回复 使用道具 举报
打印的时候,代码错误,你打印的是It.next  这时,相当于一个指针的东西已经往后移了一位,
也就是说it.next本身未打印,打印了next的next
  代码可修改如下
while (it.hasNext()) {
                        Student s = it.next();
                        System.out.println(s.getName() + "....." + s.getAge());
                }

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 赞一个!

查看全部评分

回复 使用道具 举报
二楼正解!
回复 使用道具 举报
next()会控制迭代器中指针往下走的 所以尽量不要在一次迭代中多次使用 除非你有把握控制好指针位置
回复 使用道具 举报
你的while循环里在反复调用next()方法,一次调用两次,集合中一共4个元素,打印结果当然是两个啊。
回复 使用道具 举报
姜浩 发表于 2014-11-3 15:58
楼主你的代码其他出没有错误,是迭代器迭代时出现了错误。
不知道楼主有没有发现,输出的名字和年龄,不是 ...

谢谢 关就怪我粗心了
回复 使用道具 举报
李天富 发表于 2014-11-3 16:41
你的while循环里在反复调用next()方法,一次调用两次,集合中一共4个元素,打印结果当然是两个啊。 ...

谢谢 有一次犯了低级错误
回复 使用道具 举报
楼主犯了个经典错误
  1. 结果出来了
  2. zhangsan01.....20
  3. zhangsan03.....21
  4. lisi.....22
  5. zhangsan02.....25
复制代码
回复 使用道具 举报
菜鸟表示压力好大。。没看懂
回复 使用道具 举报
小错误,注意一下就好了,毕老师视频里好像示范过这个例子:)
回复 使用道具 举报
Eagle 高级黑马 2014-11-3 20:57:59
13#
楼主记住,迭代器里不能有两个next。会出问题滴
。呵呵,记住这次的例子就好。
回复 使用道具 举报
楼主,迭代器是有指针的,初始是指向-1的,每次调用next()都会让指针加1,因此你的打印函数打印的是前一个的name和下一个的age,每个打印函数迭代两个,当然只有两行啦,你要是加入奇数个元素,你还会有惊喜的,哈哈!
回复 使用道具 举报
System.out.println(it.next().getName()+"....."+it.next().getAge());
连续用了两次,不是同一个对像了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马