我想打印出数组中的所有正数并排除负数。 例如,我有{0,-3,5,6,-9}。我想要的结果是[0,5,6]。但到目前为止,它只打印正数,并将0存储为负数([0,0,5,6,0])。
这就是我现在所拥有的:
public int[] extractPositives(int[] intArray) {
int[] array = new int[intArray.length];
for (int i = 0; i < intArray.length; i++) {
if (intArray[i] >= 0)
array[i] = intArray[i];
}
return array;
}
答案 0 :(得分:2)
Integer[] result = Arrays.asList(0, -3, 5, 6, -9).stream().filter(e -> e >= 0).toArray(Integer[]::new);
答案 1 :(得分:1)
如果您不必仅使用两个数组,则可以使用链表来附加结果,然后在其上使用toArray方法返回包含结果的数组...
public int[] extractPositives(int[] intArray) {
List<Integer> res = new LinkedList<Integer>();
for (int i = 0; i < intArray.length; i++) {
if (intArray[i] >= 0)
res.add(intArray[i]);
}
return res.toArray(new int[0]);
}
答案 2 :(得分:1)
如果要先存储结果,可以使用ArrayList:
在开头创建一个:
List myList = new ArrayList();
并将值存储在此列表中而不是新数组中:
myList.add(intArray[i]);
最后,如果需要,可以从ArrayList获取数组:
return myList.toArray();
答案 3 :(得分:0)
如果您只对使用数组感兴趣,可以尝试:
public int[] extractPositives(int[] intArray) {
int count = 0;
for (int i = 0; i < intArray.length; i++) {
if (intArray[i] >= 0)
count++;
}
if(count == 0){
return null;
}
int[] array = new int[count];
count = 0;
for (int i = 0; i < intArray.length; i++) {
if (intArray[i] >= 0)
array[count++] = intArray[i];
}
return array;
}
但这肯定是一个丑陋的解决方案。请尝试使用ArrayList。