黑马程序员技术交流社区

标题: 好心人帮忙看一下代码吧 谢谢啦 [打印本页]

作者: Fightingforever    时间: 2014-11-3 15:47
标题: 好心人帮忙看一下代码吧 谢谢啦
  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. 但我明明写的是四个人呀!为什么只存了两个
复制代码



作者: Fightingforever    时间: 2014-11-3 15:49
楼主很着急!
作者: 姜浩    时间: 2014-11-3 15:58
  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()来取值。

作者: feng_0207    时间: 2014-11-3 16:07
打印的时候,代码错误,你打印的是It.next  这时,相当于一个指针的东西已经往后移了一位,
也就是说it.next本身未打印,打印了next的next
  代码可修改如下
while (it.hasNext()) {
                        Student s = it.next();
                        System.out.println(s.getName() + "....." + s.getAge());
                }

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

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

谢谢 有一次犯了低级错误
作者: Fightingforever    时间: 2014-11-3 17:14
楼主犯了个经典错误
  1. 结果出来了
  2. zhangsan01.....20
  3. zhangsan03.....21
  4. lisi.....22
  5. zhangsan02.....25
复制代码

作者: wanmei0398    时间: 2014-11-3 18:12
菜鸟表示压力好大。。没看懂
作者: 黄宽    时间: 2014-11-3 19:06
小错误,注意一下就好了,毕老师视频里好像示范过这个例子:)
作者: Eagle    时间: 2014-11-3 20:57
楼主记住,迭代器里不能有两个next。会出问题滴
。呵呵,记住这次的例子就好。
作者: OnlyStyle    时间: 2014-11-3 21:58
楼主,迭代器是有指针的,初始是指向-1的,每次调用next()都会让指针加1,因此你的打印函数打印的是前一个的name和下一个的age,每个打印函数迭代两个,当然只有两行啦,你要是加入奇数个元素,你还会有惊喜的,哈哈!
作者: zhangyangLengen    时间: 2014-11-3 22:03
System.out.println(it.next().getName()+"....."+it.next().getAge());
连续用了两次,不是同一个对像了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2