如何删除数组中的前一个零

时间:2014-08-11 11:05:34

标签: java arrays

我正在为我的编程测试练习,我遇到了一个问题,我必须在我的数组中删除前面的0。假设我有一个[0, 0, 6, 7, 0, 3]数组。我的结果数组应该是[6, 7, 0, 3]。我的程序应该只删除前面的0。我不能使用像阵列移位等任何内置方法。请建议!

    boolean var=true;
    int len = a.length,counter=0; //length of main array

    int reslen = resultArr.length;  
    int [] arr = new int[len]; // new array


    for(int i =0; i<len ; i++){

        if(a[i]==0 && counter==0){
            continue;
        }else{
            arr[counter] = a[i];
            counter++;
        }
    }

3 个答案:

答案 0 :(得分:0)

你的逻辑被打破了。调试代码以了解您的问题。

我建议您使用Arrays#copyOfRange方法:

int index = findFirstNonZero(a);
//some checks?
int[] newArray = Arrays.copyOf(a, index, a.length);

findFirstNonZero您将实施的方法。

在你提到你不能使用内置方法后,我会告诉你你的问题是什么。

您的条件if(a[i]==0 && counter==0)将无法满足即将到来的零,因此它会插入它们,尽管它们不在开头。你应该:

  1. 标记第一个非零元素i
  2. i迭代直到数组结束并构造新数组

答案 1 :(得分:0)

我的猜测是你不允许使用任何标准方法。在这个解决方案中有一个不必要的循环,我建议你开始尝试删除它作为下一个挑战。

int[] inputArray = new int[] { 0, 0, 0, 5, 2, 1, 5, 0, 124, 0, 1 };

int offset = 0;

//Find out how many zeros
for (int a : inputArray) {
  if (a != 0) {
    break;
  }
  offset++;
}

//Create an array of the correct size:
int[] outputArray = new int[inputArray.length - offset];

//Copy the array
for (int i = 0; i < outputArray.length; i++) {
  outputArray[i] = inputArray[i + offset];
}

//Only used to confirm solution.
System.out.println(Arrays.toString(inputArray));
System.out.println(Arrays.toString(outputArray));

输出:

[0, 0, 0, 5, 2, 1, 5, 0, 124, 0, 1]
[5, 2, 1, 5, 0, 124, 0, 1]

答案 2 :(得分:-1)

    boolean flag=false;
    List<Integer> a2=new ArrayList();
    for(int i=0;i<a1.length;i++){
        if(a1[i]==0 &&flag==false){
            continue;
        }else{
            flag=true;
           a2.add(a1[i]);  
        }

    }

    System.out.println(a2);