我的程序出了什么问题,我没有得到输出中的所有整数:? 我是不是做错了什么?
import java.io.Serializable;
import java.util.*;
public class ArrayListDemo7 {
public static void main(String[] args) {
ArrayList<Object> al = new ArrayList<Object>();
System.out.println("Before = " + al.size());
al.add(10);
al.add(43);
al.add(32.5);
al.add(10);
al.add(null);
al.add('A');
al.add("ABC");
al.add(10.12);
al.add(true);
al.add("Hello");
al.add(600);
al.add(900);
/*- Remove All the objects except integer and string:*/
Iterator itr = al.iterator();
while(itr.hasNext()){
if( itr.next() instanceof Integer){
Object obj = itr.next();
System.out.println(obj);
}
}
}
}
我试图打印的只是整数对象,我能够通过流和其他方式,但它没有工作,因为某些原因?
这是因为您已经调用了ITR.NEXT()2次。 一旦在if条件下则体内。
您将调用next()
两次--一次在if
条件中,然后在if
的正文中,这意味着您将跳过值。 您应该在循环的每次迭代中调用它一次,将从它返回的值存储到一个局部变量,并对它执行所有操作:
while (itr.hasNext()) {
Obejct obj = itr.next();
if (obj instanceof Integer) {
System.out.println(obj);
}
}
每当此代码运行于integer
时,它都会调用.next()
两次:一次在if
检查中,第二次是如果if
检查成功的话。 这意味着忽略第一个integer
,并返回下一个值。 这还意味着,根据列表的结构,如果最后一个元素试图读取列表的末尾,则会对它抛出NosuchelementException
。
虽然有更常用的方法来实现这一目标(例如流,甚至是增强的foreach循环),但使用相同方法时,一个简单的修复方法是将值存储到变量中。 这样,可以在instanceof
检查和println
参数中使用相同的值:
Iterator itr = al.iterator();
while(itr.hasNext()){
Object next = itr.next();
if(next instanceof Integer){
System.out.println(next);
}
}