Я хотел бы написать отсортированный 2D-массив из двух 1D-массивов arrayTocka и randomCentriStart. Я хотел бы сделать это следующим образом:
[center1, center2, center3]
[tocka1, tocka2, tocka3]
[tocka4, tocka5, tocka6]
[tocka7, tocka8, tocka9]
[tocka10]
Таким образом, структура данных, как каждый столбец в массиве представляет один кластер с центром и токен под центром. Каждый центральный конец токки является абстракцией для координат GPS [координатаX, координата Y].
Сортировка должна go примерно так: каждая токка сравнивается с каждым центром, а токка должна быть записана под (в столбце) ближайшим центром. Поэтому я использую для поиска ближайшей точки:
public int najblizjaTIndex(TockaXY[] points) {
int index = -1;
double minDist = Double.MAX_VALUE;
for (int i = 0; i < points.length; i++) {
double dist = this.evklidianDistance(points[i]);
if (dist < minDist) {
minDist = dist;
index = i;
}
}
return index;
}
Функция, в которой сравниваемый ток-ток с ближайшим центром должен быть записан в двумерном массиве:
public static TockaXY[][] prvaRazporeditev (TockaXY[] arrayTocke, TockaXY[] randomCentriStart) {
int rows = arrayTocke.length/randomCentriStart.length + (arrayTocke.length%randomCentriStart.length == 0 ? 1 : 2);
int columns = randomCentriStart.length;
int rowCount = 0;
TockaXY[][] zacetniArray2D = new TockaXY[rows][columns];
zacetniArray2D[rowCount++] = randomCentriStart;
for (TockaXY tocka : arrayTocke) {
int index = tocka.najblizjaTIndex(randomCentriStart);
zacetniArray2D.get(index).add(tocka);
}
for(int i=0;i < arrayTocke.length; i += columns){
zacetniArray2D[rowCount++] = Arrays.copyOfRange(arrayTocke, i, Math.min(arrayTocke.length,i+columns));
}
System.out.println("Clusterji: ");
Arrays.stream(zacetniArray2D).forEach(row->{System.out.println(Arrays.toString(row));});
return zacetniArray2D;
}
Где это:
for (TockaXY tocka : arrayTocke) {
int index = tocka.najblizjaTIndex(randomCentriStart);
zacetniArray2D.get(index).add(tocka);
}
Не работает, потому что:
zacetniArray2D.get(index).add(tocka);
... был создан для arrayList. Так как заставить это работать?