Как я могу преобразовать массив Integer с длиной m в массив с длиной n в Java [решено] - PullRequest
0 голосов
/ 29 апреля 2020

Эй, я хочу преобразовать массив Integer из заданной длины (больше 852) в другой массив Integer длиной 852.

Это потому, что я хочу отобразить значения m до 852 пикселей.

Логический c способ состоит в том, чтобы просто разделить соотношение между этими двумя:

Допустим, массив, который я хочу сжать, имеет 2556 значений.

Соотношение между ними составляет 2556 / 852 = 3, поэтому я могу просто взять 3 значения и сделать среднее.

Проблема в том, что не всегда отношение является целым числом, например, 2756/852 составляет 3,2347 ...

Кто-нибудь может мне помочь?

Спасибо!

1 Ответ

0 голосов
/ 30 апреля 2020

Я действительно решил, мне удается создать функцию int Java, которая выполняет именно то, что я хочу. Вам просто нужно импортировать import java.util.Arrays;

Функция: compressArr(arrayToCompress, newArrayLength)

Возвращает массив с плавающей точкой.

public static float[] compressArr(float[] arr1, int l){
float[] arr2 = new float[l];
for(int i = 0; i<l;i++){
arr2[i] = average(Arrays.copyOfRange(arr1,P1(i,arr1.length,l),P2(i,arr1.length,l)+1));
}
  return arr2;
}

public static int P1(int x,int n, int d){
  float r = ((float)n)/d;
  int b = 0;
  int p = 0;
for(int i = 0; i<x ; i++){
p = (int)(x*r-b);
b*=p;
}
return(p);
}

public static int P2(int x,int n, int d){
  x+=1;
  float r = ((float)n)/d;
  int b = 0;
  int p = 0;
for(int i = 0; i<x ; i++){
p = (int)(x*r-b);
b*=p;
}
return(p-1);
}

static float average(float a[]) {
  int n = a.length;
  float sum = 0;
  for (int i = 0; i < n; i++)
  sum += a[i];
  return sum / n;
}
...