package arrays;
import java.util.ArrayList;
import java.util.Scanner;
public class Arrays {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
ArrayList<Integer> ary = new ArrayList<>();
System.out.println("enter the size of the ary");
int Arraysize = input.nextInt();
for (int i = 0; i< Arraysize; i++) {
System.out.println("enter the element of the ary");
ary.add(input.nextInt());
}
ArrayList<Integer> newAry = new ArrayList<>();
for (Integer num : ary) {
if (ary.contains(0)) {
newAry.add(0);
}
}
System.out.println(newAry);
}
}
我拥有的代码是每次循环时都添加零,而不检查ary
具有零时应将newAry
添加零的条件。
答案 0 :(得分:0)
您正在检查数组contains
是否为零,如果为true,则将添加0,循环将执行多次。
例如,如果列表只有一个零,则
条件ary.contains(0)
对于循环的每次迭代始终为true,而newAry.add(0);
语句将为每次迭代添加零。
您需要将代码更改为此:
for (Integer num : ary) {
if (num.equals(0)) { //if the current Integer is 0 then add it
newAry.add(num);
}
}
或者,如果您使用的是 Java-8 ,则可以使用Stream.filter
,以从原始List
获得一个新的List
并带有零。 Predicate
到过滤器将检查当前元素是否为0,否则将被忽略:
List<Integer> newAry = ary.stream().filter(num -> num.equals(0)).collect(Collectors.toList());
另一种方法是在 Java-9 中使用Collectors.filtering
,但首选第一种方法:
List<Integer> newAry = ary.stream().collect(Collectors.filtering(num -> num.equals(0), Collectors.toList()));
根据您的评论,通过更改原始列表来删除零,我们可以使用Collections.singleton
删除所有出现的零:
ary.removeAll(Collections.singleton(0));
或者我们可以采用 Java-8 方式:
ary.removeIf(num -> num.equals(0));
如果我们希望在不更改原始列表的情况下使用非零元素,则可以在!
操作中简单地使用filter
:
List<Integer> newAry = ary.stream().filter(num -> !num.equals(0)).collect(Collectors.toList());
此newAry
将是一个新的List
,其中仅过滤掉非零元素。