在不创建新方法的情况下删除数组中的零

时间:2014-11-30 08:17:36

标签: java

我试图从数组中删除零。我可以做一个单独的方法来删除零,但我想以惯用的方式。

public int[] commonFactors(int m, int n) {
int[] numbers = new int[n + 1];
for(int i = 1; i < n + 1; i++) {
  if ((m % i == 0) && (n % i == 0)) {
    numbers[i] = i;
  }
}
return numbers;//or return DelZero(numbers);
}

以下是删除所有零的方法:

public int[] DelZero(int numbers[]) {
int zeroCount=0;
for (int i = 0; i < numbers.length; i++) {
  if (numbers[i] == 0) {
    zeroCount++;
  }
} 

int[] newNumber = new int[numbers.length-zeroCount];
int j =0;
for (int i=0; i<numbers.length; i++) {
  if (numbers[i] != 0) {
    newNumber[j++] = numbers[i];
  }
}
return newNumber;
}

所以我的问题的关键在于:有没有办法在不创建新方法的情况下删除零?(在这种情况下没有DelZero。)

3 个答案:

答案 0 :(得分:1)

使用Java8,您可以轻松利用Stream

int[] arr = new int[]{0,0,7,6,5,0,1,0,4};
int[] arr_without_zeros = IntStream.of(arr).filter(i -> i != 0).toArray();

答案 1 :(得分:1)

这是一个简单的示例,您应该可以从中回答您的问题:

import java.util.Arrays;

public class RemoveZeros {

    public static void main(String[] args) {

        int[] zeroArray = { 0, 1, 0, 2, 0, 3, 0, 4, 0, 5 };

        System.out.println("Original array: " + Arrays.toString(zeroArray));

        int nonZeros = 0;

        for (int i = 0; i < zeroArray.length; i++) {
            if (zeroArray[i] != 0) {
                nonZeros++;
            }
        }

        int[] tempArray = new int[nonZeros];
        int tempIndex = 0;

        for (int j = 0; j < zeroArray.length; j++) {
            if (zeroArray[j] != 0) {
                tempArray[tempIndex] = zeroArray[j];
                tempIndex++;
            }
        }

        zeroArray = tempArray;

        System.out.println("Modified array: " + Arrays.toString(zeroArray));
    }
}

输出:

Original array: [0, 1, 0, 2, 0, 3, 0, 4, 0, 5]
Modified array: [1, 2, 3, 4, 5]

答案 2 :(得分:0)

我考虑使用java.util.List而不是原始数组。突然间,一切都变得容易了......

public List<Integer> commonFactors(int m, int n) {
    List<Integer> numbers = new ArrayList<Integer>();
    for (int i = 1; i < n + 1; i++) {
        if ((m % i == 0) && (n % i == 0) && i != 0) {
            numbers.add(i);
        }
    }
    return numbers;
}