ソース配列があり、ソース配列から指定された数の要素を削除してソース配列から新しい配列を生成したいのですが、新しい配列の要素がソース配列の要素をできるだけ多くカバーするようにしたいです (新しい要素はソース配列全体に均一に分散されます)、最初と最後の要素を同じに保ちます (存在する場合)。
私はこれを試しました:
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)とremoveElements(a、4)と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) ==> 中央から 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) の 2 つの要素を削除します (問題ありません)
removeElements(a, 3) ==> インデックス (4,9,14) または (4,10, 15) または (これも問題ありません) の 3 つの要素を削除します
removeElements(a, 4) ==> インデックス (3,7,11 , 15) または ( 3 ,7,11,14) の 4 つの要素を削除します。たとえば、ソース配列に値を描画する場合に必要です。 on (たとえば、Excel のグラフ) で、新しい配列から値を描画します。同じ線 (またはそれに近い線) を取得する必要があります。