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
条件判断的外面,先进行删除操作,再继续下一次循环。