删除一个后如何移动数组元素?

时间:2015-08-19 18:31:13

标签: java arrays for-loop

我需要添加一个仅使用循环的移位函数(这意味着我不能使用任何ListArray方法和simila,因此这不是这些方法的任何其他问题的副本。)此方法删除一个特定的整数从给定的数组中,将结果放入另一个数组,然后返回它。

public static int[] removeInt(int v, int[] in) {

    int length = 0;
    length = in.length;
    int[] toReturn = new int[length];

    for (int b = 0; b < length; b++) {
        toReturn[b] = 0;
    }

    for (int i = 0; i < length; i++) {
        if (in[i] != v) {
            toReturn[i] = in[i];
        }
    }

    return toReturn;
}

如果数组的输入为{1,2,3,4,5},并且要删除的数字为{2},则输出将为{1 0 3 4 5},但它必须为{ 1 3 4 5},我找不到将数字向左移的方法。

'v'来自主要的用户输入。对于'in'相同,之前由用户填写。

2 个答案:

答案 0 :(得分:0)

您是否考虑过使用LinkedList?这在内部管理数组,因此您不需要自己处理移动元素;你可以致电remove()

答案 1 :(得分:0)

您必须对阵列进行两次迭代:第一次计算in中包含v的频率。如果count为0,则可以返回,否则您必须创建一个长度为in.length - count的新数组。然后,您必须迭代in并将不是v的每个值添加到您的数组中。

int count = 0;

    for(int i: in) {
        if (i==v) {
            count++;
        }
    }

    int[] result = new int[in.length-count];
    int pos=0;
    for(int i: in) {
        if (i!=v) {
            result[pos] = i;
            pos++;
        }
    }

但是你可以使用Collections来简化它:

public static void main(String[] args) {
    int v = 2;
    int[] in = new int[]{1, 2, 3, 4, 5};

    List<Integer> list = new ArrayList<>();
    for(int i: in) {
        if (i!=v) {
            list.add(i);
        }
    }

    Integer[] result = list.toArray(new Integer[]{});
}

然而,这样做的缺点是你有一个Integer数组而不是int。