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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 范龙波 高级黑马   /  2013-4-30 23:28  /  1265 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 范龙波 于 2013-5-1 18:27 编辑

import java.util.*;
class TreeSetDemo
{
        public static void main(String[] args)
        {
                TreeSet t=new TreeSet();
                t.add(new Student("zhangsan",18));
                t.add(new Student("lisi",22));
                t.add(new Student("wangmazi",33));
                //t.add(new Student("wangmazi01",33));
                Iterator i=t.iterator();
                while (i.hasNext())
                {
                        Student.sop(i.next());
                        Student s=(Student)i.next();
                        System.out.println(s.GetName()+s.GetAge());
                }
        }
}
class Student implements Comparable
{
        private String name;
        private int age;
        public String GetName()
        {
                return name;
        }
        public int GetAge()
        {
                return age;
        }
        Student(String name,int age)
        {
                this.name=name;
                this.age=age;
        }
        public int compareTo(Object obj)
        {
                if(!(obj instanceof Student))
                        throw new RuntimeException("不是学生");         
                Student s=(Student)obj;
                if(this.age>s.age)
                        return 1;
                if(this.age==s.age)
                        return 0;
                return -1;
        }
        public static void sop(Object obj)
        {
                System.out.println(obj);
        }

} //这个代码打印的结果出现了异常,可我没有找到我哪里写错了,能告诉下我哪里的代码写错了吗谢谢。编译没有错误,可是打印却出问题。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

3 个回复

倒序浏览
  1. 错误提示:Exception in thread "main" java.util.NoSuchElementException  //没有这个元素异常->说明遍历出问题了
  2.   while (i.hasNext())
  3.                 {
  4.                         //Student.sop(i.next());//注释掉
  5.                         Student s=(Student)i.next();
  6.                         System.out.println(s.GetName()+s.GetAge());
  7.                 }
  8. /*
  9.   在while循环中两次用了next()导致游标(指针)发生两次变化
  10.   例:第一次循环:经过两次next()后,此时指针指向wangmazi
  11.      第二次循环:输出wangmazi,再次next->NoSuchElementException.
  12. */
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
修改如下:
  1. import java.util.*;
  2. class TreeSetDemo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 TreeSet<Student> t=new TreeSet<Student>();
  7.                 t.add(new Student("zhangsan",18));
  8.                 t.add(new Student("lisi",22));
  9.                 t.add(new Student("wangmazi",33));
  10.                 Iterator<Student> i=t.iterator();
  11.                 while (i.hasNext())
  12.                 {
  13. //                       Student.sop(i.next()); //你打印对象干嘛?。。。 这是这个错的
  14.                         Student s=i.next();
  15.                         System.out.println(s.GetName()+s.GetAge());
  16.                 }
  17.         }
  18. }
  19. class Student implements Comparable<Student>
  20. {
  21.         private String name;
  22.         private int age;
  23.         public String GetName()
  24.         {
  25.                 return name;
  26.         }
  27.         public int GetAge()
  28.         {
  29.                 return age;
  30.         }
  31.         Student(String name,int age)
  32.         {
  33.                 this.name=name;
  34.                 this.age=age;
  35.         }
  36.         public int compareTo(Student s)
  37.         {
  38.                 if(this.age>s.age)
  39.                         return 1;
  40.                 if(this.age==s.age)
  41.                         return 0;
  42.                 return -1;
  43.         }
  44.         public static void sop(Object obj)
  45.         {
  46.                 System.out.println(obj);
  47.         }

  48. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
吴东泽 发表于 2013-4-30 23:56
修改如下:

谢了,明白了,next方法在while语句中存在了两次容易出现那个错误。受教了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马