public static int[] convert10to0(int[] array) {
if (array != null) {
int mark_index = 0;
boolean replace = false;
for (int i = 0; i < array.length; i++) {
if (array[i] == 10) {
if (!replace) {
mark_index = i;
replace = true;
}
array[i] = 0;
} else if (array[i] != 10 && replace) {
array[mark_index] = array[i];
array[i] = 0;
mark_index++;
}
}
}
return array;
}
移位是用mark_index实现的。它标记了数组中下标最小的一个由10替换成0的下标。
只要在循环的过程中,产生了10替换0的动作,replace 置为true。
接下来循环时找到的非10的数字就会放置到mark_index位置,同时mark_index向后移动移位,当前位置变成0。
你可以运行一下,没有问题的。
public class Test {
public static void main(String args[]){
int array1[]={1,10,10,2};
int array2[]={10,2,10,1,99,10,1,10,10,2};
Test.printArray(Test.convert10to0(array1));
System.out.println();
Test.printArray(Test.convert10to0(array2));
}
public static void printArray(int[] array) {
if (array != null) {
for (int obj : array) {
System.out.print(obj + " ");
}
} else {
System.out.println("数组为空");
}
}
public static int[] convert10to0(int[] array) {
//之前的代码,因为太长,这里粘贴超出回答能支持的最长量了
}
}