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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 唐志海 中级黑马   /  2014-1-6 17:22  /  920 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 唐志海 于 2014-1-21 02:38 编辑

帮忙看下面的代码哪里出错了。。会发生NoSuchElementException异常

  1. import java.util.Comparator;
  2. import java.util.Iterator;
  3. import java.util.TreeSet;

  4. public class fanXingTest2
  5. {
  6.         public static void main(String[] args)
  7.         {
  8.                 TreeSet<Student> ts=new TreeSet<Student>(new comp());
  9.                 ts.add(new Student("zhangsan",11));
  10.                 ts.add(new Student("lishi3",14));
  11.                 ts.add(new Student("lishi3",11));
  12.                 ts.add(new Student("lishi2",11));
  13.                 ts.add(new Student("lishi1",12));
  14.                 printl(ts);
  15.         }
  16.         public static void printl(TreeSet<? extends Person> ts)
  17.         {
  18.                 Iterator<? extends Person> it=ts.iterator();
  19.                 while(it.hasNext())
  20.                 {
  21.                         System.out.println(it.next().getName()+"....."+it.next().getAge());
  22.                 }
  23.         }
  24. }
  25. class comp implements Comparator<Person>
  26. {
  27.         public int compare(Person p1,Person p2)
  28.         {
  29.                
  30.                 int num=p1.getName().compareTo(p2.getName());
  31.                 if(num==0)
  32.                 {
  33.                         return new Integer(p1.getAge()).compareTo(new Integer(p2.getAge()));
  34.                
  35.                 }
  36.                 return num;
  37.         }
  38. }
  39. class Person
  40. {
  41.         private String name;
  42.         private int age;
  43.         public void setName(String name) {
  44.                 this.name = name;
  45.         }
  46.         public String getName() {
  47.                 return name;
  48.         }
  49.         public void setAge(int age) {
  50.                 this.age = age;
  51.         }
  52.         public int getAge() {
  53.                 return age;
  54.         }
  55.         Person(String name,int age)
  56.         {
  57.                 this.name=name;
  58.                 this.age=age;
  59.         }
  60.         
  61. }
  62. class Student extends Person
  63. {
  64.         Student(String name,int age)
  65.         {
  66.                 super(name,age);
  67.                
  68.         }
  69.         
  70. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

1 个回复

倒序浏览
看一下我的代码,注释中有解释

  1. public class fanXingTest2
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 TreeSet<Student> ts=new TreeSet<Student>(new comp());
  6.                 ts.add(new Student("zhangsan",11));
  7.                 ts.add(new Student("lishi3",14));
  8.                 ts.add(new Student("lishi3",11));
  9.                 ts.add(new Student("lishi2",11));
  10.                 ts.add(new Student("lishi1",12));
  11.                 printl(ts);
  12.         }
  13.         public static void printl(TreeSet<? extends Person> ts)
  14.         {
  15.                 Iterator<? extends Person> it=ts.iterator();
  16.                 while(it.hasNext())
  17.                 {
  18.                                 /*建议你修改成这样的*/
  19.                                 Person p = it.next();
  20.                                 System.out.println(p.getName()+"....."+p.getAge());
  21.                                
  22.                         //System.out.println(it.next().getName()+"....."+it.next().getAge());
  23.                                 /*你的错误在于上一条语句中,为了调用getName方法使用it.next()迭代元素
  24.                                  * 为了调用getAge语句又使用了it.next()迭代元素
  25.                                  * 所以这就造成了你的输出语句中的名字与年龄不一致
  26.                                  * 你的输出语句中有这么一条    lishi3.....14   这是明显错误的
  27.                                  *
  28.                                  * 造成异常的原因是,当it.next()得到第5条记录的姓名时,it.next()会接着迭代后面的记录,
  29.                                  * 因为只有5条记录,所以会报找不到第6条记录的异常
  30.                                  * */
  31.                 }
  32.         }
  33. }
  34. class comp implements Comparator<Person>
  35. {
  36.         public int compare(Person p1,Person p2)
  37.         {
  38.                
  39.                 int num=p1.getName().compareTo(p2.getName());
  40.                 if(num==0)
  41.                 {
  42.                         return new Integer(p1.getAge()).compareTo(new Integer(p2.getAge()));
  43.                
  44.                 }
  45.                 return num;
  46.         }
  47. }
  48. class Person
  49. {
  50.         private String name;
  51.         private int age;
  52.         public void setName(String name) {
  53.                 this.name = name;
  54.         }
  55.         public String getName() {
  56.                 return name;
  57.         }
  58.         public void setAge(int age) {
  59.                 this.age = age;
  60.         }
  61.         public int getAge() {
  62.                 return age;
  63.         }
  64.         Person(String name,int age)
  65.         {
  66.                 this.name=name;
  67.                 this.age=age;
  68.         }
  69.         
  70. }
  71. class Student extends Person
  72. {
  73.         Student(String name,int age)
  74.         {
  75.                 super(name,age);
  76.                
  77.         }
  78.         
  79. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马