如何使用 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]);
}
我现在有一份清单。 我想在使用命令行时删除两个对象。
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]);
}