题干
有如下员工信息:
姓名:张三,工资:3000 姓名:李四,工资:3500 姓名:王五,工资:4000 姓名:赵六,工资:4500 姓名:田七,工资:5000
先需要将所有的员工信息都存入ArrayList集合中,并完成如下操作:
1、判断是否有姓名为“王五”的员工,如果有,改名为“王小五”
2、判断是否有姓名为“赵六”的员工,如果有,将其删除
3、给姓名为“田七”的员工,涨500工资
代码
javabean类
public class Worker {
/*
员工类
姓名 工资
*/
private String name;
private int wedge;
public Worker() {
}
public Worker(String name, int wedge) {
this.name = name;
this.wedge = wedge;
}
/**
* 获取
* @return name
*/
public String getName() {
return name;
}
/**
* 设置
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
* 获取
* @return wedge
*/
public int getWedge() {
return wedge;
}
/**
* 设置
* @param wedge
*/
public void setWedge(int wedge) {
this.wedge = wedge;
}
}
测试类
import java.util.ArrayList;
public class Work3 {
public static void main(String[] args) {
/*
有如下员工信息:
~~~java
姓名:张三,工资:3000
姓名:李四,工资:3500
姓名:王五,工资:4000
姓名:赵六,工资:4500
姓名:田七,工资:5000
~~~
先需要将所有的员工信息都存入ArrayList集合中,并完成如下操作:
1、判断是否有姓名为“王五”的员工,如果有,改名为“王小五”
2、判断是否有姓名为“赵六”的员工,如果有,将其删除
3、给姓名为“田七”的员工,涨500工资
*/
ArrayList<Worker> list = new ArrayList<>();
Worker w1 = new Worker("张三", 3000);
Worker w2 = new Worker("李四", 3500);
Worker w3 = new Worker("王五", 4000);
Worker w4 = new Worker("赵六", 4500);
Worker w5 = new Worker("田七", 5000);
list.add(w1);
list.add(w2);
list.add(w3);
list.add(w4);
list.add(w5);
for (int i = 0; i < list.size(); i++) {
Worker wk = list.get(i);
String wName = wk.getName();
if (wName.equals("王五")) {
wk.setName("王小五");
}
if (wName.equals("赵六")){
list.remove(i);
i--;
}
if (wName.equals("田七")) {
Worker w = list.get(i);
w.setWedge(w.getWedge() + 500);
}
}
// for (int i = 0; i < list.size(); i++) {
// Worker wk = list.get(i);
// String wName = wk.getName();
// if (wName.equals("赵六")) {
// list.remove(i);
// }
//
// }
//遍历集合
for (int i = 0; i < list.size(); i++) {
Worker worker = list.get(i);
System.out.println(worker.getName() + worker.getWedge());
}
}
}
存在问题
第一次编写完成后,无论怎么运行,
if (wName.equals("田七")) {
Worker w = list.get(i);
w.setWedge(w.getWedge() + 500);
}
这段代码都不会运行到
原因是:遍历时如果删除元素,后面的元素会往前走,索引再加1就会有元素遗漏
解决办法
遍历时如果删除元素,后面的元素会往前走,索引再加1就会有元素遗漏,所以删除后遍历索引要相应的减1,防止有元素遍历不到。
if (wName.equals("赵六")){
list.remove(i);
i--;
}