因此,对于单任务,我应该编写一个具有双精度数组作为属性的“ 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是向量,而不是数组,即使我使用数组初始化属性也是如此。

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

最佳答案

您需要使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;
}

关于java - Java vector 的点积/标量积,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58879154/

10-12 05:21