Сравнение каждого набора двумерного массива для определения наибольшего расстояния - PullRequest
0 голосов
/ 20 января 2019

Итак, у меня есть набор элементов в двумерном массиве, и я пытаюсь определить наибольшее расстояние между координатами.

Я сделал цикл для прохождения каждого элемента, но я не могу понять, как сравнивать только первый набор, второй и так далее. Уже несколько дней я пробую разные методы, и это то, что я получил до сих пор.

по формуле: furthestDistance = Math.sqrt ((Math.pow ((maxX - minX), 2)) + (Math.pow ((maxY-minY), 2)));

int max = cities[0][0]; //int to store the max of the i column
  int min = cities[0][0]; //int to store the max of the i column


  int maxX = cities[0][0]; //int to store the max of the i column
  int maxY = cities[0][0]; //int to store the max of the i column

  int minX = cities[0][0]; //int to store the max of the j column
  int minY = cities[0][0]; //int to store the max of the j column




 for(int y=1; y<cities[0].length; y++) { //loop through columns
       for(int x=0; x<cities[y].length; x++) { //loop through lines


            if(cities[x][y] > max) { //if the number at the column i and line j is bigger than max

                max = cities[x][y];
                maxX = cities[x][0];
                maxY = cities[0][y];
            }
            if(((cities[x][0])  < min) && (cities[0][y] < min)) { //if the number at the column i and line j is bigger than max
                min = cities[x][y];

                minX = cities[x][0];
                minY = cities[0][y];

            }


        }
    }
 System.out.println("the maxX is " +maxX+ " the minX is " + maxY);
 System.out.println("the maxX is " +minX+ " the minX is " + minY);



    }


}

для примера массива:
int [] [] города = {{-48, -4}, {23, -45}, {- 7, -40}, {- 28,31}, {36,24}, {23, -11} , {36, -10}, {- 9,21}};

и ожидаемый результат должен быть около 91.5259. Любая помощь / направление будет принята с благодарностью !!

1 Ответ

0 голосов
/ 20 января 2019

Если вы это правильно поняли, вам просто нужно выполнить цикл for for, чтобы оценить расстояние между каждой парой городов (i, j) и обновить максимальное расстояние, если оно выше.Это можно сделать легко:

public static void main (String[] args) {
    int[][] cities = {{-48,-4},{23,-45},{-7,-40},{-28,31},{36,24},{23,-11},{36,-10},{-9,21}};

    double maxDistance = 0;
    for (int i = 0; i < cities.length-1; i++) {
        for (int j = i+1; j < cities.length; j++) {
            maxDistance = Math.max(getDistance(cities[i], cities[j]), maxDistance);
        }
    }
    System.out.println("The max distance is " + maxDistance);
}

private static double getDistance(int[] city1, int[] city2) {
    int dx = city1[0] - city2[0];
    int dy = city1[1] - city2[1];
    return Math.sqrt(dx*dx + dy*dy);
}

Обратите внимание, что j идет от i+1 до cities.length, потому что вам нужно только проверить неупорядоченные пары (i, j), так какрасстояние (i, j) == расстояние (j, i).


Альтернатива Java 8:

double maxDistance  = Arrays.stream(cities)
        .flatMapToDouble(city1 -> Arrays.stream(cities).mapToDouble(city2 -> getDistance(city1, city2)))
        .max()
        .orElseThrow(IllegalArgumentException::new); //Or any other exception
...