【问题标题】:Remove index method stopping at first index(java string array)删除在第一个索引处停止的索引方法(java字符串数组)
【发布时间】:2015-02-17 21:50:10
【问题描述】:

所以我有这个循环基本上遍历字符串的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<String> users = new ArrayList<String>();
users.add("bob");
users.add("matthew");
users.add("Albert");
usagers.add("Jon");

谢谢。

【问题讨论】:

    标签: java list loops methods indexing


    【解决方案1】:

    代替

    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 使与 contains 的比较不区分大小写。为此,您需要将列表中的条目更改为

    ArrayList<String> users = new ArrayList<String>();
    users.add("bob");
    users.add("matthew");
    users.add("albert");
    users.add("jon");    
    

    然后使用

    if(users.contains(elementdelete.toLowerCase())) {
    

    我认为你根本不需要 for 循环。

    【讨论】:

    • 感谢您的建议!
    【解决方案2】:

    目前发生的情况是它进入for循环,检查第一个用户,users.get(index).equals(elementdelete)为假,所以它不输入if,输入else,然后将boucleretrait设置为false,所以它退出while 循环。所以将boucleretrait 设置为false 应该在所有用户都被检查之后发生。

    除此之外,询问用户名称也应该发生在for 循环之外,否则它会在每次循环检查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,而是选择仅在检查users 中的每个元素并且退出for 循环后才将boucleretrait 设置为false,并且还要求用户在 for 循环之前搜索的名称,因此它在搜索所有之前只询问一次。

    【讨论】:

      猜你喜欢
      • 2011-03-01
      • 1970-01-01
      • 2020-09-08
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多