Этот цикл потребляет два элемента Set
на каждой итерации (поскольку вы вызываете in.next()
дважды на каждой итерации), что неверно и приводит к тому, что отрицательные элементы не удаляются.
Рассмотримпорядок, в котором элементы вашего Set
повторяются:
0 // consumed by if(in.next() < 0), which returns false, element not removed
-1 // consumed by int i = in.next();, and later printed -1
1 // consumed by if(in.next() < 0), which returns false, element not removed
-2 // consumed by int i = in.next();, and later printed -2
2 // consumed by if(in.next() < 0), which returns false, element not removed
-3 // consumed by int i = in.next();, and later printed -3
3 // consumed by if(in.next() < 0), which returns false, element not removed
4 // consumed by int i = in.next();, and later printed 4
Как видите, ваш цикл не удаляет какой-либо элемент из Set
и печатает только половину элементов (-1 -2 -3 4
).
Это должно быть:
for (Iterator<Integer> in = integerSet.iterator(); in.hasNext();) {
int i = in.next();
if (i < 0)
in.remove();
else
System.out.printf("%d ",i);
}
Как предположил Тим, если вы напечатаете Set
после цикла, вы увидите, содержит ли он толькоэлементы, которые он должен содержать. Ваша петля станет:
for(Iterator<Integer> in = integerSet.iterator(); in.hasNext();){
if(in.next() < 0)
in.remove();
}
System.out.println (integerSet);