所以我有这个循环基本上通过和字符串的arraylist,然后如果找到它从中删除一个元素:
public static void delete(List<String> users) {
boolean boucleretrait = true;
while (boucleretrait) {
System.out.print("del a user(1) or quit(2)?;");
Scanner choice = new Scanner(System.in);
int choicedel = choice.nextInt();
if (retraitchoix == 1) {
for (int index = 0; index < users.size(); index++) {
Scanner element = new Scanner(System.in);
System.out.print("enter name to delete \n");
String elementdelete = element.nextLine();
if (users.get(index).equals(elementdelete)) {
users.remove(index);
System.out.print(users);
} else {
System.out.print("not present\n");
retrait(users);
boucleretrait = false;
}
}
}
}
}
然而,该方法只是与列表中的第一个元素进行比较,如果它不是正确的,只需进入else循环而不检查其他元素。我不知道如何修复它。如果需要,请看我的arraylist:< / p>
ArrayList<String> users = new ArrayList<String>();
users.add("bob");
users.add("matthew");
users.add("Albert");
usagers.add("Jon");
谢谢。
答案 0 :(得分:3)
而不是
if(users.get(index).equals(elementdelete)){
users.remove(index);
System.out.print(users);
}
你想要像
这样的东西if(users.contains(elementdelete)) {
users.remove(elementdelete);
System.out.print(users);
}
您可能希望使用 toLowerCase 与包含不区分大小写进行比较。为此,您需要将列表中的条目更改为
ArrayList<String> users = new ArrayList<String>();
users.add("bob");
users.add("matthew");
users.add("albert");
users.add("jon");
然后使用
if(users.contains(elementdelete.toLowerCase())) {
我认为你根本不需要 for 循环。
答案 1 :(得分:0)
当前正在发生的事情是它进入for
循环,检查第一个用户,对users.get(index).equals(elementdelete)
获取错误,因此它不会输入if,进入else,然后将boucleretrait
设置为false
,以便退出while
循环。因此,在检查完所有用户后,应将boucleretrait
设置为false。
除此之外,要求用户输入名称也应该在for
循环之外发生,否则每次循环检查{{1}中的下一个用户时都会要求新名称}。
记住这一点,你可以重写这部分代码:
ArrayList
到此:
if (retraitchoix == 1) {
for (int index = 0; index < users.size(); index++) {
Scanner element = new Scanner(System.in);
System.out.print("enter name to delete \n");
String elementdelete = element.nextLine();
if (users.get(index).equals(elementdelete)) {
users.remove(index);
System.out.print(users);
} else {
System.out.print("not present\n");
retrait(users);
boucleretrait = false;
}
}
}
我已删除了Scanner element = new Scanner(System.in);
System.out.print("enter name to delete \n");
String elementdelete = element.nextLine();
if (retraitchoix == 1) {
for (int index = 0; index < users.size(); index++) {
if (users.get(index).equals(elementdelete)) {
users.remove(index);
System.out.print(users);
}
}
System.out.print("not present\n");
retrait(users);
boucleretrait = false;
}
,而只是在选中了else
中的每个元素且boucleretrait
之后才选择将false
设置为users
}循环已退出,并且还要求用户在for
循环之前搜索名称,以便在搜索所有内容之前只询问一次。