如何使用 Arraylist 中的命令行同时删除两个对象

How to remove two object at the same time using command line from an Arraylist

我现在有一份清单。 我想在使用命令行时删除两个对象。

 Ex)
    javac Main.java
    
    java Main 2 3 
 a v i

我尝试更改代码。我做不到。 请帮助我。

条件

使用 Arraylist

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        String[] s = {"a", "v", "c", "e", "i"};
        List<String> list = new ArrayList<>(s.length);
        for (String string : s) {
            list.add(string);
        }
        try {
                int index = Integer.parseInt(args[0]);
                
                list.remove(index);
                for (String string : list) 
                System.out.println(string);
        } catch(ArrayIndexOutOfBoundsException e){
            System.out.println("it is not good");
        }catch (IllegalArgumentException e){
            System.out.println("it is not good");
        }catch (IndexOutOfBoundsException e){
            System.out.println("it is not good");
        }
    }
}

试试下面的代码。您的代码只需要一个参数 args[0]。相反,我使用了一个 for 循环来迭代所有给定的参数。但是,这不会按照您的想法工作,因为删除项目时会移动索引。

public static void main(String[] args) {
        String[] s = {"a", "v", "c", "e", "i"};
        List<String> list = new ArrayList<>(s.length);
        for (String string : s) {
            list.add(string);
        }
        try {
            for (int i = 0; i< args.length; i++){
                int index = Integer.parseInt(args[i]);
                list.remove(index);
            }
            
            for (String string : list)
                System.out.println(string);
        } catch(ArrayIndexOutOfBoundsException e){
            System.out.println("it is not good");
        }catch (IllegalArgumentException e){
            System.out.println("it is not good");
        }catch (IndexOutOfBoundsException e){
            System.out.println("it is not good");
        }
    }

相反,如果您使用以下内容,它会根据删除的项目数根据提供的参数调整索引。

for (int i = 0; i< args.length; i++){
                int index = Integer.parseInt(args[i])-i;
                list.remove(index);
            }

我刚刚意识到代码没有考虑未排序的索引。因此,我添加了一些代码来为您执行排序。请改用以下代码。

int[] numbers = Arrays.stream(args).mapToInt(Integer::parseInt).toArray(); //convert args to int array
System.out.println(Arrays.toString(numbers));  //shows your arguments
Arrays.sort(numbers);  //sort your indexes in ascending order
System.out.println(Arrays.toString(numbers));  //shows sorted arguments

for (int i = 0; i< numbers.length; i++){
    list.remove(numbers[i] - i);
}

for (String string : list)
    System.out.println(string);

请注意,如果您不想使用 numbers[i]-i,您可以从数组的后面开始迭代数组并使用 numbers[i] 代替

for (int i = numbers.length-1; i>=0; i--){
       list.remove(numbers[i]);
}