这是我对这个问题的尝试,我如何将0移动到数组的末尾?我尝试用结束元素交换0元素,那不是它......
public void removeMiddle() {
int pos = values.length/2;
int n = values.length
if (n%2 == 0) {
int fMid = pos - 1;
values[pos] = 0;
values fMid = 0;
} else {
int j = n-1;
int k = j/2;
int l = k+1;
int m = n-l;
values[m] = 0;
}
}
Array = {5, 2, 7, 9, 1, 3, 2, 4}
result = [5, 2, 7, 0, 0, 3, 2, 4]
Expected: [5, 2, 7, 3, 2, 4, 0, 0]
Array = {5, 2, 7, 9, 1, 3, 2}
result = [5, 2, 7, 0, 1, 3, 2]
Expected: [5, 2, 7, 1, 3, 2, 0]
答案 0 :(得分:1)
提示:使用System.arraycopy()
,然后将最后一个元素设置为零。
或者,使用循环。
答案 1 :(得分:1)
将数组转换为List,删除零,将它们添加回来,然后将列表转换回数组。
答案 2 :(得分:0)
试试这个:我认为它易于理解和实施。
public static void main(String[] args) {
int[] arr = { 5, 0, 7, 9, 1, 3, 0 };
int index = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] != 0) {
arr[index++] = arr[i];
}
}
Arrays.fill(arr, index, arr.length, 0);
System.out.println(Arrays.toString(arr));
}
输入:
{ 5, 0, 7, 9, 1, 3, 0 }
输出:
[5, 7, 9, 1, 3, 0, 0]
答案 3 :(得分:0)
也许您可以使用LinkedList结构并在其开头添加数组的所有非0元素,并在结尾添加所有0。
//initial array
Integer[] array ={1,2,5,8,0,9,10};
//converted array to List
ArrayList<Integer> inputList= new ArrayList<Integer>(Arrays.asList(array));
//secondary list
LinkedList<Integer> outputList = new <Integer>LinkedList();
for(Integer x:inputList){
int val= Integer.parseInt(x.toString());
if(val !=0){
//add non 0 values at the start
outputList.addFirst(x);
}else{
//add 0's at the end
outputList.addLast(x);
}
}
//convert back to array
Integer[] outputArray = new Integer[outputList.size()];
outputArray = outputList.toArray(outputArray);
答案 4 :(得分:0)
如前所述,你可以将数组转换为List,删除零,将它们添加回来,然后将列表转换回数组,或者如果你想从头开始,你知道数组的长度,那么只需要创建一个数组(比如说) array1)并扫描原始数组(比如数组)直到数组结束。 如果数组包含非零数字,则将其插入数组(array1)。完成扫描后,只需将零添加到剩余的数组索引中。
希望这可能会对你有所帮助。