Java向量的点积/标量积

时间:2019-11-15 14:33:58

标签: java arrays vector methods

因此,对于uni分配,我应该写一个具有双精度数组作为属性的“ Vector”类。 假定类型为“向量”的对象表示n维空间中的向量。

现在,我必须编写一个方法,该方法采用整数n并创建“ Vector”类型的对象,并使用大小为n的双精度数组初始化属性,以便可以使用Vector来计算标量积以后。

计算标量积的方法应该采用一个向量q,然后使用向量q计算当前向量的标量积,因此基本上,如果“ p”是我的当前向量,则p.scalarproduct(q)为应该计算p和q的标量积。

到目前为止,这是我未完成的代码:

public class Vector {

    private static double[] vec;

    public Vector(double[] vec){
        this.vec = vec;
    }

    static Vector newWithDimension(int n){
        vec = new double[n];
        Vector vector = new Vector(vec);
        return vector;
    }

    double scalarproduct(Vector q){
        Vector p = vector;

        double scalarproduct = 0.0;

        if (q.length == p.length){

            for(int i = 0; i < q.length; i++){
                scalarproduct = scalarproduct + q[i] * p[i];
            }
        }

        return scalarproduct;
    }

}

如您所见,我仍然缺少一些内容,并且代码存在一些问题:

对于一个,我不知道如何编写标量乘积方法,因为它应该仅将一个向量作为参数,但是应该计算两个向量的标量积。

我不知道如何在没有参数的情况下使用当前向量。

此外,在标量乘积方法中,尝试使用q.length时也会出错,因为即使我使用数组初始化属性,q还是一个Vector而不是一个数组。

我对编程没有任何经验,我也不知道我的实现是否在正确的道路上,或者我现在应该做什么,我只是感到困惑。感谢您对解决此任务的任何帮助。

2 个答案:

答案 0 :(得分:3)

您需要将vec设为非静态。这样,每个向量都有自己的double []。

然后,您可以像这样重做scalarProduct:

double scalarproduct(Vector q){

    double scalarproduct = 0.0;

    if (q.vec.length == vec.length){

        for(int i = 0; i < q.vec.length; i++){
            scalarproduct = scalarproduct + q.vec[i] * vec[i];
        }
    }

    return scalarproduct;
}

但是我要做的是使它成为静态函数

static double scalarproduct(Vector q, Vector p){

    double scalarproduct = 0.0;

    if (q.vec.length == p.vec.length){

        for(int i = 0; i < q.vec.length; i++){
            scalarproduct = scalarproduct + q.vec[i] * p.vec[i];
        }
    }

    return scalarproduct;
}

答案 1 :(得分:0)

  

我不知道如何在没有参数的情况下使用当前向量。

this引用当前对象,因此您可以使用它来访问成员变量。您可能想使vec不是静态的,并引用它而不是p

所以替换

private static double[] vec;

使用

private double[] vec;

,然后您可以将其称为this.vec