通过比较索引找到集合中的最大长度

时间:2019-01-24 04:27:02

标签: java

我正在尝试用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变量感到困惑,因为我只是从countrys数组中提取坐标,所以我认为它们已经定义了?我当时想有一种方法可以比较索引或方程式中的某些内容。

非常感谢您!

2 个答案:

答案 0 :(得分:2)

在i之后开始j,因为您已经将先前的索引与数组的其余部分进行了比较。而且,您是否定义了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
    }
}

如果不清楚或我错过了什么,请发表评论;)

答案 1 :(得分:2)

我在您的代码上做了些改动

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

注意如何循环ij,以及如何定义x1, x2, y1, y2