我正在为我的编程测试练习,我遇到了一个问题,我必须在我的数组中删除前面的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++;
}
}
答案 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)
将无法满足即将到来的零,因此它会插入它们,尽管它们不在开头。你应该:
i
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);