您的代码中有几个错误,我将在下面列出所有这些错误
- 您在打印
itr.next()
时使用System.out.println(itr.next());
跳过了元素
- 您正在创建具有值
Integer
的新9
对象,并比较它们的引用而不是值,这将返回false
例如:在i1
和i2
下是两个具有相同值的Integer
对象,但它们是指向不同引用的两个不同对象。因此==
运算符返回false
Integer i1 = new Integer(10);
Integer i2 = new Integer(10);
System.out.println(i1==i2); //false
- 因此,您可以简单地使用
equal
比较Integers
对象中的值,并仅使用{{1}来打印equal
到9
以外的值。 }阻止
代码:
else
- 但是您不需要创建
int int1=9;
Integer in = new Integer(int1); //don't use like this,it is deprecated and no need of it
Iterator<Integer> itr = num.iterator();
while(itr.hasNext()) {
Integer res = itr.next();
if(res.equal(in)) {
itr.remove();
}else {
System.out.println(res);
}
}
对象,可以简单地使用Integer
,其中Java可以为您执行auto boxing,还可以使用通用类型的对象,例如equals
和Iterator<Integer>
代码:
List<Integer> num = new ArrayList<>();
,
这是因为您在循环中两次调用了迭代器,导致跳过了元素。您应该重构代码以仅一次调用next来获得预期的输出,如下所示。
while(itr.hasNext()) {
int num = itr.next();
System.out.println(num);
if(num == in) {
itr.remove();
}
}
,
由于该语句System.out.println(itr.next());
,您正在跳过元素。
并且 == 用于参考比较而不是内容比较。因此,您的if块永远不会执行, 9 也不会被删除。您应该像下面这样:
Iterator<Integer> itr = num.iterator();
while(itr.hasNext()) {
Integer val = (Integer) itr.next();
if(val.equals(in)) {
itr.remove();
}
}
本文链接:https://www.f2er.com/3108165.html