是这样的,建立了一个HashSet表,然后用Iterator里面的next()拿出数据,在这里想做个判断,把所有的不同数据类型的数据拿出来,可是总是会出现一个runtimeexception----java.util.NoSuchElementException,特向各位求解import java.util.*;public class changyong { public static void main(String[] args) {
Collection c = new HashSet();                    c.add(new Integer(333));
                  c.add(new Double(3.1413));                  Iterator i = c.iterator();                  while (i.hasNext()){     if (i.next() instanceof Integer){
int i1 = (Integer)i.next();
System.out.println(i1);

}
}
       }
 }按理说我没有用泛型,所以i.next()拿出来的应该是个object类型的,所以我就强制转换了,开始以为问题就是出在那句上了可是后来我把那个if去了,又出了一个exception:  java.lang.ClassCastException: java.lang.Double  能稍微看出来是由于我加入的那个Double对象的关系,把那句注释掉就可以打印int类型的值了,这次好像问题就是出在那个if语句上了,可是小菜我实在不知道为什么了,只能求各位大神了,谢谢先

解决方案 »

  1.   

    int i1 = (Integer)i.next(); ???
    int 可以用Integer来赋值?
    int i1= ((Integer)i.next()).intValue().
    试试看?
      

  2.   

    对不起我说错了,i.next()一个就会往下走一次,因此,if里面得i.next是第一个Integer,但下面的i.next则到了Double,所以出错,改为下面的试试看:import java.util.*;public class changyong { public static void main(String[] args) {
    Collection c = new HashSet(); c.add(new Integer(333));
    c.add(new Double(3.1413)); Iterator i = c.iterator(); while (i.hasNext()) {
    Object t1 = (Object) i.next();
    if (t1 instanceof Integer) {
    int i1 =((Integer) t1).intValue();
    System.out.println(i1); }
    }
    }
    }
      

  3.   


    不行啊,我也试过加上intValue()了还是有错误 java.util.NoSuchElementException
    at java.util.HashMap$HashIterator.nextEntry(Unknown Source)
    at java.util.HashMap$KeyIterator.next(Unknown Source)
      

  4.   

    成了,没问题了,真是感谢哈,我开始也想过建立一个object类型的对象,然后把next拿出来的值赋进去,但没想过还要在加上个强制转换?这是为什么啊?next()拿出来不已经是object了吗?不过还要多谢你的解答,高手真多啊,刚发帖不到5分钟就解决了
      

  5.   


    嗯,你也可以在Object t1 = (Object) i.next(); 不用Object,用Iterator t1 =  i.next();,因为任何实体类都继承了Object类,所以这里我不管直接强制转换成Object再说。其实这里的关键还是.next()直接取下一个。你可以用你原来的代码,只不过上面把add Double的那个去掉,那么你的原来的代码得到的异常就是空指针错误了。因为第一个next()已经过了Interger那个,再next()找不到就会空指针
      

  6.   

    用个引用接  i.next();