0

这是我对这个问题的尝试,我如何将 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]
4

5 回答 5

1

提示:使用后将System.arraycopy()最后一个元素设置为零。

或者,使用循环。

于 2013-04-08T08:09:46.493 回答
1

将数组转换为列表,删除零,将它们添加回来,然后将列表转换回数组。

于 2013-04-08T08:12:30.867 回答
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);
于 2013-04-08T08:40:44.327 回答
0

正如之前有人所说,您可以将数组转换为列表,删除零,将它们添加回来,然后将列表转换回数组,或者如果您想要从头开始并且您知道数组的长度,那么只需创建一个数组(比如 array1)和扫描原始数组(比如数组)直到数组的末尾。如果数组包含非零数,只需将其插入数组(array1)。完成扫描后,只需将零添加到剩余的数组索引。

希望这可以帮助你。

于 2013-04-08T08:45:02.840 回答
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]
于 2013-04-08T08:27:20.503 回答