删除在第一个索引处停止的索引方法(java字符串数组)

时间:2014-12-19 00:09:23

标签: java list loops methods indexing

所以我有这个循环基本上通过和字符串的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");

谢谢。

2 个答案:

答案 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循环之前搜索名称,以便在搜索所有内容之前只询问一次。