删除数组内0元素将剩余元素放到新的数组中
第一个问题
第一次编写代码时首先考虑的是,外层循环进行对原始数组内需要删除的元素的查询,当元素不符删除要求时吧元素写入新数组,问题出现在这里,因为新数组不能和原始数组使用同一个循环控制变量变量,所以考虑写如第二个循环例如下图:
下面展示一些 内联代码片
。
public static void clearzero(int arr[],int arr2[]) {
int i1 = 0;
for (int i = 0, j = 0; i < arr.length; i++) {
if (arr[i] != 0) {
for (; i1 < arr2.length; i1++) {
arr2[i1]=arr[i];
}
}
}
}
毫无疑问代码出现了一些问题,当时数组不等于0时第二次for循环会直接吧新建数组空间直接填满,新数组结果为 1,1,1,1,1 。
第二个问题
还有一个问题感觉挺重要的就是新建数组长度,刚开始没有考虑直接让新建数组长度等于原始数组,即使在多数都不会超过原始数组长度,缺少了减少对内存空间占用的问题考虑。
这一点上需要计算出数组内为0的元素 ,新数组长度为原始数组长度减去数组内为0元素。这一点上对数组占用空间进行了优化。
最终代码
```java
public static int count(int arr[]){//数组内0元素的
int count=0;
for (int i = 0; i < arr.length; i++) {
if(arr[i]==0){
count++;
}
}
return count;
}
public static void clearzero(int arr[],int arr2[]) {//删除0元素把剩余数组返回到新数组中
for (int i = 0,j=0; i < arr.length; i++) {
if(arr[i]!=0){
arr2[j++]=arr[i];
}
}
}