因此,对于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而不是一个数组。
我对编程没有任何经验,我也不知道我的实现是否在正确的道路上,或者我现在应该做什么,我只是感到困惑。感谢您对解决此任务的任何帮助。
答案 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
。