从数组中删除每个第三个元素?

时间:2015-11-17 01:57:03

标签: java arrays

public static int[] replicate(int[] arr, int n) {
int[] temp = new int[arr.length];
int current=0;

int count = 0;
for (int i = 0; i < arr.length; i++) {
    if (count/n!=0){
    current = arr[i];
    count++;
    }
    if(count > 0 ){

    temp[count] = current;

    }
}

int[] whitelist = new int[count];

System.arraycopy(temp, 0, whitelist, 0, count);

return whitelist;
 }

我想要一个删除了每个第n个元素的数组。 EX:如果n为3且arr = {1,2,3,4,5,6,7} 期望的输出是{1,2,4,5,7} 我似乎无法让这段代码发挥作用。我知道如何使用列表来执行此操作,但我想找到一种方法来执行此操作而不导入任何内容。

4 个答案:

答案 0 :(得分:2)

你必须做

if (count % n != 0)

答案 1 :(得分:1)

试试这个:

public static int[] replicate(int[] array, int n) {
    int[] newArray = new int[array.length - array.length / n];
    int j = 0;
    for (int i = 0; i != array.length; i++) {
        if ((i + 1) % n != 0) {
            newArray[j++] = array[i];
        }
    }
    return newArray;
}

它创建一个适当长度的新数组,迭代原始数组的所有元素,并且只有当它们的索引是n的整数倍时才将它们复制到新数组(&#34; + 1&#34;部分处理从0开始的索引。)

答案 2 :(得分:0)

您无法从基本Java数组中删除元素。你可以使用各种Collections和ArrayList。但是使用 commons.langs.ArrayUtils 你可以像下面那样预先形成它:

   int[] arr = {1, 2, 3, 4, 5, 6, 7};

    for (int i = 0; i < arr.length; i++) {
        if ((i + 1) % 3 != 0) {
           arr=ArrayUtils.removeElement(arr, i);
        }
    }

答案 3 :(得分:0)

尝试使用JSONArray代替%,您也不需要第二个/语句 因为你想从索引0开始将数字存储到if数组中,而不是像你的代码那样将索引1存储。

temp