我从一本学术编程书中学习了一些练习。任务是实现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();
}
}
答案 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();
}
}