我有源数组,我想通过从源数组中删除指定数量的元素来从源数组生成新数组,我希望新数组中的元素覆盖源数组中尽可能多的元素(新元素均匀分布在源数组上)并保持第一个和最后一个元素相同(如果有)。
我试过这个:
public static void printArr(float[] arr)
{
for (int i = 0; i < arr.length; i++)
System.out.println("arr[" + i + "]=" + arr[i]);
}
public static float[] removeElements(float[] inputArr , int numberOfElementToDelete)
{
float [] new_arr = new float[inputArr.length - numberOfElementToDelete];
int f = (inputArr.length ) / numberOfElementToDelete;
System.out.println("f=" + f);
if(f == 1)
{
f = 2;
System.out.println("f=" + f);
}
int j = 1 ;
for (int i = 1; i < inputArr.length ; i++)
{
if( (i + 1) % f != 0)
{
System.out.println("i=" + i + " j= " + j);
if(j < new_arr.length)
{
new_arr[j] = inputArr[i];
j++;
}
}
}
new_arr[0] = inputArr[0];
new_arr[new_arr.length - 1] = inputArr[inputArr.length - 1];
return new_arr;
}
public static void main(String[] args)
{
float [] a = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
a = removeElements(a, 6);
printArr(a);
}
我已经测试了(removeElements(a, 5) and removeElements(a, 4) and removeElements(a, 3)) 但是removeElements(a, 6); 给了:
arr[0]=1.0
arr[1]=3.0
arr[2]=5.0
arr[3]=7.0
arr[4]=9.0
arr[5]=11.0
arr[6]=13.0
arr[7]=15.0
arr[8]=0.0
arr[9]=16.0
问题是 (arr[8]=0.0) 它必须取一个值..如何解决这个问题?是否有任何代码可以删除指定数量的元素(并保持元素分布在源数组上而不在某些元素中生成零)?
编辑 :
示例:removeElements(a, 1) ==> 从中间移除一个元素 (7) {1,2,3,4,5,6,7,9,10,11,12,13,14,15,16 }
removeElements(a, 2) ==> 删除索引 (4,19) 或 (5,10) 或 (4,10) 处的两个元素(没问题)
removeElements(a, 3) ==> 删除索引 (4,9,14) 或 (4,10, 15) 处的三个元素或(也没有问题)
removeElements(a, 4) ==> 删除索引 (3,7,11, 15) 或 (3,7,11,14) 处的四个元素,例如 .. 我想要的是如果我在源数组中绘制值在(例如 Excel 上的图表)上,我从新数组中绘制值,我必须得到相同的线(或接近它)。