萌新练习集合问题,想不明白

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");
}