Java-ArrayList集合遍历并删除元素报错解决方法

案例:遍历并删除元素

需求:

① 某个班级的考试在系统上进行,成绩大致为:98, 77, 66, 89, 79, 50, 100

② 现在需要把先把成绩80分以下的数据去掉

分析:

① 定义ArrayList集合存储多名学生的成绩

② 遍历集合中每个元素,如果元素值低于80分,去掉它

1.先创建一个ArrayList集合存储几位学生的成绩

ArrayList<Integer> scores = new ArrayList<>();
scores.add(98);
scores.add(77);
scores.add(66);
scores.add(89);
scores.add(79);
scores.add(50);
scores.add(100);
System.out.println(scores);

2.把低于80分的成绩从集合中去掉

(1) 错误方法

这样遍历成功一个数据后,后面的数据会往前进一步导致直接跳过该数据遍历到下一个数据

for(int i= 0; i < scores.size(); i++){
    int score = scores.get(i);
    if(score < 80){
        //删除低于80的分数
        scores.remove(i);
}
}

运行截图:

(2) 问题:还存在低于80分的成绩没有被删除!

解决方案一:

每遍历完一个索引,回退一步,这样可以避免跳过进位的数据

for(int i = 0; i < scores.size(); i++){
    int score = scores.get(i);
    if (score < 80){
        scores.remove(i);
        i--;//删除成功后必须退一步,这样可以保证下次回到这个位置,这样就不会跳过数据
    }
}

 解决方案二:

从后面往前遍历

for(int i = scores.size() - 1; i >= 0; i--){
    int score = scores.get(i);
    if (score < 80){
        scores.remove(i);
}
}
    System.out.println(scores);

运行截图:

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值