Объединение значений 1D массива со значениями другого 1D массива и запись его в отсортированный 2d массив в Java - PullRequest
0 голосов
/ 20 марта 2020

Я хотел бы написать отсортированный 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. Так как заставить это работать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...