我正在尝试计算二维数组中两个值之间的欧几里德距离。我需要最大的,所以我有 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/