制作一种从java中的数组中删除零的方法

时间:2016-03-12 02:45:56

标签: java

很好奇如何编写一个方法来从数组中删除所有零。如果我在main方法中有数组。例如,我的主要方法看起来像

  public static void main(String[] args) {
 int[] test = {1, 0, 4, 7, 0, 2, 10, 82, 0};
 System.out.println(Arrays.toString(test) +  ": length = " + test.length);
 int[] result = removeZeros(test);
 System.out.println(Arrays.toString(result) + ": length = " + result.length);
 }

并让代码输出长度和没有零的数组,如:

 [1, 0, 4, 7, 0, 2, 10, 82, 0]: length = 9
 [1, 4, 7, 2, 10, 82]: length = 6

我不知道如何为此做一个方法,而不是做这样的事情:

  int[] test = {1, 0, 4, 7, 0, 2, 10, 82, 0};
    int length = 0;
    for (int i=0; i<test.length; i++){
        if (test[i] != 0)
            length++;
    }
    int [] intResult = new int[length];
    for (int i=0, j=0; i<test.length; i++){
        if (test[i] != 0) {
            intResult[j] = test[i];
            j++;
        }
    }

任何想法如何使这个方法成为一个方法,让它打印出原始数组和没有零的新数组+长度?

5 个答案:

答案 0 :(得分:1)

  

任何想法如何使这个方法成为一个方法,让它打印出原始数组和没有零的新数组+长度?

没有明显更好的方法来删除零。显然,你可以把它放在一个方法中...如果这就是你想要做的。该方法需要创建并返回新数组。 (您无法更改传递给方法的数组参数的大小...)

要打印数组,请使用循环迭代并打印元素,或Arrays.toString(array)并输出字符串。

要打印数组的长度,请打印array.length

答案 1 :(得分:1)

我没有测试它,但这应该有效:

public class Blah {

public static void main(String[] args) {
 int[] test = {1, 0, 4, 7, 0, 2, 10, 82, 0};
 System.out.println(Arrays.toString(test) +  ": length = " + test.length);
 int[] result = removeZeros(test);
 System.out.println(Arrays.toString(result) + ": length = " + result.length);
 }

public int[] removeZeros(int[] test) {
    int length = 0;
for (int i=0; i<test.length; i++){
    if (test[i] != 0)
        length++;
}
int [] intResult = new int[length];
for (int i=0, j=0; i<test.length; i++){
    if (test[i] != 0) {
        intResult[j] = test[i];
        j++;
    }
 return intResult;
}

}

答案 2 :(得分:1)

只需对您自己的代码进行最轻微的更改,就可以轻松地将其作为一种方法。

int [] removeZeros(int [] test);
{
    if (test == null) {
        return null;
    }

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

    int [] intResult = new int[length];

    for (int i=0, j=0; i<test.length; i++){
        if (test[i] != 0) {
            intResult[j] = test[i];
            j++;
        }
    }

    return intResult;
}

答案 3 :(得分:1)

使用Java 8:

int[] test = {1, 0, 4, 7, 0, 2, 10, 82, 0}
int[] result = Arrays.stream(test).filter(i -> i != 0).toArray();

答案 4 :(得分:0)

怎么样

  • 创建与数组输入长度相同的数组结果
  • 使用可变长度来计算预期结果的长度
  • 如果输入的当前元素大于零,则result [length] =
    输入测试的当前元素[i]和长度++
  • 如果长度大于0,则使用length的值剪切数组结果

代码:

int[] test = {1, 0, 4, 7, 0, 2, 10, 82, 0};
int[] intResult = new int[test.length];
int length = 0;
for (int i=0; i<test.length; i++){
    if (test[i] > 0) {
        intResult[length] = test[i];
        length++;
    }
}
if(length > 0)intResult = Arrays.copyOf(intResult, length);