携手创作,共同成长!这是我参与「掘金日新计划 · 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了,这是为什么呢?因为在我们删除集合中某个元素值后,它后边的元素就会顶替上来。如下图所示:
所以就会出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天,敬请期待下文,谢谢支持。