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} 我似乎无法让这段代码发挥作用。我知道如何使用列表来执行此操作,但我想找到一种方法来执行此操作而不导入任何内容。
答案 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