是这样的,建立了一个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语句上了,可是小菜我实在不知道为什么了,只能求各位大神了,谢谢先
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语句上了,可是小菜我实在不知道为什么了,只能求各位大神了,谢谢先
int 可以用Integer来赋值?
int i1= ((Integer)i.next()).intValue().
试试看?
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); }
}
}
}
不行啊,我也试过加上intValue()了还是有错误 java.util.NoSuchElementException
at java.util.HashMap$HashIterator.nextEntry(Unknown Source)
at java.util.HashMap$KeyIterator.next(Unknown Source)
嗯,你也可以在Object t1 = (Object) i.next(); 不用Object,用Iterator t1 = i.next();,因为任何实体类都继承了Object类,所以这里我不管直接强制转换成Object再说。其实这里的关键还是.next()直接取下一个。你可以用你原来的代码,只不过上面把add Double的那个去掉,那么你的原来的代码得到的异常就是空指针错误了。因为第一个next()已经过了Interger那个,再next()找不到就会空指针