两个向量实现之间的欧几里德距离

时间:2016-01-05 22:33:34

标签: java arrays vector euclidean-distance

我从一本学术编程书中学习了一些练习。任务是实现2个向量并计算它们之间的欧几里德距离。不,这不是家庭工作,而是自学。

我正在寻求关于距离实施正确性的一些反馈。

public class EuclideanDist
{
    public static void main(String[] args)
    {   
        EuclideanDist euc = new EuclideanDist();
        Random rnd = new Random();        

        int N = Integer.parseInt(args[0]);

        double[] a = new double[N];
        double[] b = new double[N];
        double[] x = new double[N];

        euc.print(euc.init(a, rnd));        
        euc.print(euc.init(b, rnd));        
        print(euc.distance(a, b, x));
    }

    private double[] init(double[] src, Random rnd)
    {
        for(int i = 0; i < src.length; i++)
        {
            src[i] = rnd.nextDouble();
        }
        return src;
    }
    private double[] distance(double[] a, double[] b, double[] x)
    {
        double diff; 
        int N = a.length;

        for(int i = 0; i < N; i++)
        {
            diff = a[i] - b[i];
            x[i] = Math.sqrt(diff * diff);
        }
        return x;
    }
    private static void print(double[] x)
    {
        int N = x.length;
        for(int j = 0; j < N; j++)
            System.out.print(" " + x[j] + " ");
        System.out.println();
    }
}

1 个答案:

答案 0 :(得分:3)

基于@AlanStokes的建议,以下代码似乎是一个解决方案(我已经测试过了):

import java.util.Random;

public class EuclideanDist {
    public static void main(String[] args) {
        EuclideanDist euc = new EuclideanDist();
        Random rnd = new Random();

        int N = Integer.parseInt(args[0]);

        double[] a = new double[N];
        double[] b = new double[N];

        euc.print(euc.init(a, rnd));
        euc.print(euc.init(b, rnd));
        System.out.println(euc.distance(a, b));
    }

    private double[] init(double[] src, Random rnd) {
        for (int i = 0; i < src.length; i++) {
            src[i] = rnd.nextDouble();
        }
        return src;
    }

    private double distance(double[] a, double[] b) {
        double diff_square_sum = 0.0;
        for (int i = 0; i < a.length; i++) {
            diff_square_sum += (a[i] - b[i]) * (a[i] - b[i]);
        }
        return Math.sqrt(diff_square_sum);
    }

    private void print(double[] x) {
        for (int j = 0; j < x.length; j++) {
            System.out.print(" " + x[j] + " ");
        }
        System.out.println();
    }
}