gpt4 book ai didi

java - 计算二维数组中两个值之间的最大欧氏距离

转载 作者:行者123 更新时间:2023-11-30 05:48:46 26 4
gpt4 key购买 nike

我正在尝试计算二维数组中两个值之间的欧几里德距离。我需要最大的,所以我有 2 个 for 循环来遍历数组,并且我还有一个 maxDistance 变量来存储比较时的最大距离。

我的代码如下

  //Returns the largest Euclidean distance between any two cities 
within the cities array
public static double furthestDistance(int[][] x)
{
int power;
double sum = 0.0;
int distance = 0;
int maxDistance = 0;
for (int i = 0; i < x.length; i++)
{
for(int j = 0; j<x[0].length; j++)
{
sum = (x[i][j] - x[i][i+1]) + (x[i][j] - x[i][j+1]);

power = (int) Math.pow(sum, 2);
distance = (int)Math.sqrt(power);

if (distance > maxDistance)
{
maxDistance = distance;
}



}
}
return Math.sqrt(sum);
}

我遇到了问题,收到一个错误,提示我的 arrayIndex 超出范围,但我不确定遍历数组以找到 2d 数组中任意两个值之间的最大距离(大约 10)的最佳方法是什么” x,y 坐标"

x 是一个城市数组,如下所示

int[][] cities0 = {{22,-45},{-20,-43},{-45,29},{41,35},{21,4}, 
{23,-37},{16,-19},{-44,-10},{26,15},{6,-30},{2,35},{6,-19}};

我不确定我是否以正确的方式解决问题,或者是否正确计算了距离?

最佳答案

欧几里德距离为

public static double calculateDistance(int[] array1, int[] array2)
{
double Sum = 0.0;
for(int i=0;i<array1.length;i++) {
Sum = Sum + Math.pow((array1[i]-array2[i]),2.0);
}
return Math.sqrt(Sum);
}

现在,问题是你有一个点数组,每个点都由一个二元素数组表示。索引越界错误源于以下事实:

sum = (x[i][j] - x[i][i+1]) + (x[i][j] - x[i][j+1]);

它假设有下一个 i 和下一个 j,并且它假设 x 的第 i 个元素至少有 i + 2 个元素,如果 i > 0 将崩溃。使用我在答案开始时描述的方法,您的解决方案将如下所示:

double maxDistance = -1;
int firstPoint = -1;
int secondPoint = -1;
//notice that the limit is x.length - 1, because we will compare the penultimate
//item with the last
for (int i = 0; i < x.length - 1; i++) {
for (int j = i + 1; j < x.length; j ++) {
double d = calculateDistance(x[i], x[j]);
if (d > maxDistance) {
maxDistance = d;
firstPoint = i;
secondPoint = j;
}
}
}

关于java - 计算二维数组中两个值之间的最大欧氏距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54357325/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com