题目:
1、随机生成10个[1,100]之间的整数,放到List集合中,遍历显示
2、找出前3名最大值,删除它们,注意可能重复
3、显示删除后的结果
想用迭代器完成题目,但是一直无法达到效果。
代码:
import java.util.*;
public class Test {
public static void main(String[] args) {
//生成10个随机整数的集合
Random r = new Random();
Set<Integer> set = new HashSet<>();
for (int i = 1;i <= 10;i++) {
set.add(r.nextInt(100) + 1);
}
System.out.println("10个随机值:" + set);
//找出最大的前三
Set<Integer> max3 = new LinkedHashSet<Integer>();
int max;
for (int i = 1;i <= 3;i++) {
max = 0;
Iterator<Integer> iterator = set.iterator();
for ( iterator = set.iterator();iterator.hasNext();) {
Integer next = iterator.next();
if (iterator.next()> max) {
max = iterator.next();
}
}
//找到最大值存入max3
max3.add(max);
//在原集合中,删掉最大值
iterator.remove();
}
System.out.println("前3个最大的:" + max3 );
System.out.println("删除后:" + set);
}
}
报错:
Exception in thread "main" java.util.NoSuchElementException
其他:
我自己尝试过别的办法,可以完成题目,但是想使用迭代器来完成。
这个报错我自己得理解是迭代器到最后一位没元素了才发生得报错。我的思路是通过for循环,每一次循环重置迭代器,找到当前集合的最大值,存入max3,并且再原先的set里删除找到的最大值,依此达到题目效果,但是我自己怎么改都是报以上的错误。有人知道该怎么优化吗?
题目就是我自学java碰到的。。头铁