使用临时变量并且不使用任何utils将零移动到Java中数组的末尾

时间:2019-01-26 06:22:54

标签: java arrays

我想将int数组中的零移动到末尾,我的计划是创建一个新数组,将非零数字按顺序放入新数组中,而另一个循环则将零放在其末尾数组 P.S i有一个可以计算零个数的int值,并且零个的最终位置将由数组的长度确定-count ++

我尝试将非零数字存储到临时数组中,并将零放在非零数字的原始位置(仅适用于数组末尾的非零数字)

public class movezeros {

    public static void main(String[] args) {
        int[] numbers = { 1, 2, 0, 4, 5, 0, 4, 0, 1, 3, 4 };
        int[] array1 = new int[numbers.length];

        int i;
        int temp = 0;
        int count = 0;
        for (i = 0; i < numbers.length; i++) {
            if (numbers[i] != 0) {
                array1[i] = numbers[i];
            }
            if (numbers[i] == 0) {
                count++;
                temp = numbers[i];
                array1[numbers.length - count++] = temp;
            }
            System.out.print(array1[i]);
        }
    }
}

我希望系统将array1的零移到末尾,但实际输出只是所有数字在其初始位置

3 个答案:

答案 0 :(得分:0)

此行为您提供了一个新的零填充数组:

    int[] array1 = new int[numbers.length];

这样做的时候

            array1[i] = numbers[i];

-您将数字移到新数组中的相同索引处。因此,您仍然在移动的数字之间保留零,因此结果似乎是相同的数组。

相反,您需要在array1中保留一个单独的索引,指向您尚未填写的下一个位置。这是您要放置numbers中下一个非零元素的地方。

提示:由于新数组在创建时被零填充,因此您无需执行任何操作即可将零移到上方。

提示:使用System.out.println(Arrays.toString(array1));打印整个新阵列。它将提供更具可读性的输出。

答案 1 :(得分:0)

您可以尝试以下方法:

import java.util.Arrays;
public class StackOverflow1 {
public static void main(String[] args) {
    int[] numbers = { 1, 2, 0, 4, 5, 0, 4, 0, 1, 3, 4 };
    int[] array1 = new int[numbers.length];

    int i;
    int temp;
    int count = 0;
    for (i = 0; i < numbers.length; i++) {
        if ((numbers[i] != 0)) {
            temp = numbers[count];
            numbers[count] = numbers[i];
            numbers[i] = temp;
            count = count + 1;
        }
    }
    System.out.println(Arrays.toString(numbers));
}
}

输出:[1、2、4、5、4、1、3、4、0、0、0]

答案 2 :(得分:-1)

对于正数数字,如果非零元素的顺序并不重要,则排序将为您完成:

   Integer[] numbers = { 1, 2, 0, 4, 5, 0, 4, 0, 1, 3, 4 };
   Arrays.sort(numbers, Collections.reverseOrder());

结果:[5,4,4,4,3,2,1,1,0,0,0]

编辑Ole V.V. proposed,以保持非零元素的原始顺序,请使用:

Arrays.sort(numbers, Comparator.comparing(n -> n == 0));