用于删除数组中的零的输出不符合预期?

时间:2015-12-03 17:04:43

标签: java arrays

  

给定一个整数数组,以相同的顺序返回一个数组,并删除所有0。

示例输入#1

remove({1,2,3,4,5,0,1,2,0,0,2})

示例输出#1

{1,2,3,4,5,1,2,2}

示例输入#2

remove({0,0,1,2})

示例输出#2

{1,2}

示例输入#3

remove({0,0,0,0})

示例输出#3

{}

MyApproach

我首先计算了那里有多少个零然后我创建了一个新数组,并且只添加了那些不为零的元素。

但我没有得到正确的输出。

  

任何人都可以指导我做错了吗?

以下是我上述程序的代码:

public int[] remove(int[] arr)
{
 int count=0;
 for(int i=0;i<arr.length;i++)
 {
     if(arr[i]==0)
     {
         count++;
     }
 }
 int p[]=new int[arr.length-count];
 for(int m=0;m<p.length;)
 {
     if(arr[m]==0)
     {

         m++;
     }
     else
     {
          p[m]=arr[m];
           m++;
     }
 }
 return p;

 }


Parameters                  Actual Output   Expected Output


'{0,1,2,3,0,1}'               {0,1,2,3}      {1,2,3,1}

2 个答案:

答案 0 :(得分:3)

您需要两个计数器,一个用于复制的位置,另一个用于复制到的位置。

for (int n = 0, m = 0; m < p.length; m++)
    if (arr[m] != 0)
       p[n++] = arr[m];

或者你可以做

int n = 0;
for (int x : arr)
    if (x != 0)
        p[n++] = x;

在Java 8中,你可以做到

public static int[] removeZero(int[] ints) {
    return IntStream.of(ints)
            .filter(i -> i != 0)
            .toArray();
}

答案 1 :(得分:0)

尝试使用它来删除数组中的零:

public int[] remove(int[] array)
  {
     int j = 0;
     for( int i=0;  i<array.length;  i++ )
   {
    if (array[i] != 0)
        array[j++] = array[i];
   }
     int [] newArray = new int[j];
     System.arraycopy( array, 0, newArray, 0, j );
     return newArray;

 }