因此,对于单任务,我应该编写一个具有双精度数组作为属性的“ 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/