老大别再贪吃了 2022-01-05 16:52 采纳率: 75%
浏览 95
已结题

迭代器重置问题,如何通过for循环重置迭代器

题目:
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碰到的。。头铁

  • 写回答

1条回答 默认 最新

  • CSDN专家-sinJack 2022-01-05 16:57
    关注
    if (iterator.next()> max) {
      max = iterator.next();
    }
    改为
    if (next> max) {
       max = next;
    }
    
    import java.util.*;
    public class Main {
        public static void main(String[] args) {
    //生成10个随机整数的集合
            Random r = new Random();
            List<Integer> set = new ArrayList<>();
            for (int i = 1;i <= 10;i++) {
                set.add(r.nextInt(100) + 1);
            }
            System.out.println("10个随机值:" + set);
            Collections.sort(set);
            System.out.println(set);
            for(int i=9;i>6;i--){
                set.remove(i);
            }
            System.out.println("删除后:" + set);
        }
    }
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 1月13日
  • 已采纳回答 1月5日
  • 创建了问题 1月5日

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来