public class Dao {
static ArrayList<Man> am = new ArrayList<>();
static Scanner sc = new Scanner(System.in);
public boolean addStudent() {
System.out.println("请输入学生ID");
int i = sc.nextInt();
System.out.println("请输入学生年龄");
int i1 = sc.nextInt();
System.out.println("请输入学生姓名");
String next = sc.next();
Student st = new Student(next, i1, i);
am.add(st);
return true;
}
public void revmoveSMan() {
System.out.println("请输入学生ID");
int i = sc.nextInt();
for (Man man : am) {
if (i == man.getId()) {
am.remove(man);
} else {
System.out.println("删除失败,请核对id");
}
}
}
这个为什么删除其他可以,集合第一个对象就不行啊TAT
public void gaiSMan() {
System.out.println("请输入学生ID");
int i = sc.nextInt();
for (Man man : am) {
if (i == man.getId()) {
System.out.println("请输入学生年龄");
int i1 = sc.nextInt();
System.out.println("请输入学生姓名");
String next = sc.next();
man.setAge(i1);
man.setName(next);
} else {
System.out.println("修改失败,请核对id");
}
}
}
这个修改时为什么修改失败也会跳出来,但修改会成功啊TAT
你这种ArrayList的遍历方式 最终会使用迭代器遍历,迭代器的遍历和删除操作会对对数组的数量进行检查,发生变化就会抛出异常,可以使用java.util.concurrent.CopyOnWriteArrayList这个实现类
问题1:怎么判断修改/删除目标失败?是不是有一次修改/删除成功,就为修改/删除成功。而不是每次都判断每条数据。
问题2:如果id不重复,删除完后,后面的元素就不需要在检测,所以需要使用break跳出循环。如果id重复,则删除元素后坐标需要-1,为什么需要-1,因为集合的长度变化了(长度-1,坐标后的所有元素都向前移动一位)。
boolean flag = false;
/*
ID不重复
for (Man man:am) {
if (i == man.getId()) {
am.remove(man);
flag = true;
System.out.println("删除成功!");
break;
}
}
*/
//ID重复
for (int ii=0;ii<am.size();ii++) {
if (i == am.get(ii).getId()) {
am.remove(ii);
ii--;
System.out.println("删除成功!");
flag = true;
}
}
if(!flag){
System.out.println("删除失败,请核对id");
}