Поиск наибольшей длины в наборе путем сравнения индексов

Я пытаюсь сделать программу на java, которая находит наибольшую длину между любой парой координат во всем наборе путем сравнения.

Я полагаю, что моя проблема заключается не столько в поиске максимальной длины, сколько в создании всех возможных пар. Я действительно не понимаю, что я должен использовать для координат x и y в данном уравнении. Как мне получить координаты от каждой пары и сравнить их? Я читал повторяющиеся решения, но я новичок в программировании и не мог их понять.

Это часть моего кода, которая у меня есть до сих пор, которая имеет отношение к этой проблеме:

public static void main (String[] args) {
    int[][] countries = {{-34,-7},{76,-23},{-5,-20},{-56,64},{12,56}};

double maxDistance = 0;
    for(int i = 0; i < countries.length-1; ++i) {
      for(int j = i; j < countries.length; ++j) {
        double distance = Math.sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));

Буду признателен за любую помощь или даже толчок в правильном направлении.

Я не понимаю, как мне определить переменные x/y, потому что я просто вытаскиваю координаты из массива стран, поэтому я думал, что они уже определены? Я думал, что будет способ сравнить индексы или что-то в уравнении.

СПАСИБО БОЛЬШОЕ ВАМ ОБОИМ!

начните j с i, т.е. for(int j=i; j<countries.length; ++j).. потому что вы уже сравнили предыдущие индексы с остальной частью массива. И вы определили свои переменные x1, x2, y1, y2?

Manoj Vadehra 24.01.2019 05:29
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
1
79
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

начните свой j после i, потому что вы уже сравнили предыдущие индексы с остальной частью массива. И вы определили свои переменные x1, x2, y1, y2?

Это должно помочь:

int[][] countries = {{-34,-7},{76,-23},{-5,-20},{-56,64},{12,56}};

double maxDistance = 0;
    for(int i = 0; i < countries.length-1; ++i) {
      for(int j = i+1; j < countries.length; ++j) { //do not create zero distance or duplicate pairings
        //get your x1, x2, y1, y2 from countries[i] and countries[j]
        double distance = Math.sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));
        //compare with maxDistance
        //assign maxDistance if you find it greater than previous one and record the coordinates which produced this distance
    }
}

Оставляйте комментарии, если что-то непонятно или я что-то пропустил ;)

Ответ принят как подходящий

Я немного изменяю ваш код

int[][] countries = { { -34, -7 }, { 76, -23 }, { -5, -20 }, { -56, 64 }, { 12, 56 } };

double maxDistance = 0;
for (int i = 0; i < countries.length - 1; ++i) {
    int x1 = countries[i][0];
    int y1 = countries[i][1];
    for (int j = i; j < countries.length; ++j) { // first j will be i
        int x2 = countries[j][0];
        int y2 = countries[j][1];
        double distance = Math.sqrt((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
        maxDistance = maxDistance < distance ? distance : maxDistance;
    }
}
System.out.println(maxDistance);

Вывод

158.09174551506476

обратите внимание, как я зацикливаю i и j, и как я определяю x1, x2, y1, y2

Другие вопросы по теме