使用JOptionPane时出现的三天没想明白的问题


 public class Add {
            public static void main(String[] args) throws Exception {

                String s;
        int i=0;
        ArrayList<String> list = new ArrayList<>();
        BufferedReader bf = new BufferedReader(new FileReader("C:\\Users\\86188\\IdeaProjects\\java\\SummerHoliday\\Jsu4\\src\\Jsu"));
        while ((s = bf.readLine()) != null) {
            list.add(s);
            Object[] obj = {"删除", "下一个"};
            int result = JOptionPane.showOptionDialog(null, s, "警告", JOptionPane.DEFAULT_OPTION, -1, null, obj, obj[0]);
            if (result == 0) {
                    System.out.println("删除");
                    list.remove(i);
                    i++;

                } else if (result == 1) {
                    System.out.println("下一个");
                } else {
                    System.exit(0);
                }


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

困扰我一天的问题了,删不了集合的第二个索引,为什么!集合一共3个索引


public class Add {
    public static void main(String[] args) throws Exception {
        String s;
        ArrayList<String> list = new ArrayList<>();
        BufferedReader bf = new BufferedReader(new FileReader("C:\\Users\\86188\\IdeaProjects\\java\\SummerHoliday\\Jsu4\\src\\Jsu"));
        
        while ((s = bf.readLine()) != null) {
            list.add(s);
            Object[] obj = {"删除", "下一个"};
            int result = JOptionPane.showOptionDialog(null, s, "警告", JOptionPane.DEFAULT_OPTION, -1, null, obj, obj[0]);
            
            if (result == 0) {
                System.out.println("删除");
                list.remove(s); // 直接从ArrayList中删除当前行
            } else if (result == 1) {
                System.out.println("下一个");
            } else {
                System.exit(0);
            }
        }
        
        System.out.println(list);
    }
}

remove(i)操作放置的位置不正确。当前代码中,i的初始值为0,并且在读取每一行并添加到集合后立即执行了list.remove(i)操作。这样做会导致在删除索引为0的元素后,下一次循环时要删除的元素实际上是索引为1的元素,而此时i还是0,因此无法正确删除。

public class Add {
    public static void main(String[] args) throws Exception {

        String s;
        int i = 0;
        ArrayList<String> list = new ArrayList<>();
        BufferedReader bf = new BufferedReader(new FileReader("C:\\Users\\86188\\IdeaProjects\\java\\SummerHoliday\\Jsu4\\src\\Jsu"));
        while ((s = bf.readLine()) != null) {
            list.add(s);
            Object[] obj = { "删除", "下一个" };
            int result = JOptionPane.showOptionDialog(null, s, "警告", JOptionPane.DEFAULT_OPTION, -1, null, obj,
                    obj[0]);
            if (result == 0) {
                System.out.println("删除");

            } else if (result == 1) {
                System.out.println("下一个");
            } else {
                System.exit(0);
            }

            list.remove(i);

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

list.remove(i)操作放在if条件判断的外面,先进行删除操作,再继续下一次循环。