与计算机的情话--Java-(20)

182 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第20天,点击查看活动详情

1、前言

自己喜欢的东西就不要问别人好不好看,自己决定做的事就不要问别人同不同意,你的生活,不会因为别人的话而变好。但,会因为你的努力而有更多可能性。

说着今天有雨,结果是阴天也没有下,天气预报有时候也是不准的。

2、正文

作为程序员光学习基础知识是不够的,重要的是代码,代码不会写,那就不是程序员,对于小白来说更得一步一步来,只有日积月累的练习才可以,不积小流怎么成江海。昨天刚学习的ArrayList集合常用方法。今天来拿这些功能解决一些案例。

第一个案例是:遍历并删除元素值

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

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

public class ArrayList2 {
    public static void main(String[] args) {
        //学习遍历并删除元素的实例
        //创建一个ArrayList集合存储班级学生的成绩
        ArrayList<Integer> score = new ArrayList<>();
        score.add(98);
        score.add(77);
        score.add(66);
        score.add(89);
        score.add(79);
        score.add(50);
        score.add(100);
        System.out.println(score);

        //把低于80分的成绩从集合中删除
        for (int i = 0; i < score.size(); i++) {
            int score1 = score.get(i);
            if (score1 < 80){
                score.remove(i);
            }
        }
        System.out.println(score);
    }
}

按正常来讲这是正确的,但是真的正确吗?输出结果是[98, 66, 89, 50, 100]。很明显出bug了,这是为什么呢?因为在我们删除集合中某个元素值后,它后边的元素就会顶替上来。如下图所示:

8a4296e9ff7a5ba1f923d81a3bca3b4.png db472768aacca88bd1e3436b054f003.png 95d7cbf02b886e384b6edf060894908.png

所以就会出bug,导致元素删除不完,这个时候我们应该怎么做呢?

for (int i = 0; i < score.size(); i++) {
    int score1 = score.get(i);
    if (score1 < 80){
        score.remove(i);
        i--;
    }

}

在后边加一个 “i--;”这样就可以了,当它删除完元素后退一下,然后在前进,这样就不会漏掉元素了。

还有第二种解决方法,是倒着遍历集合然后再删除元素。

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

        }
        System.out.println(score);
    }
}

这种方法也很好用,这样也不会漏掉元素。Java果真是一个严谨的程序语言。

今天是我参加8月更文挑战的第20天,敬请期待下文,谢谢支持。