这有点困难,但我会尽力让我的问题尽可能清楚。 所以我正在开发一个处理 vector 运算的项目。我针对不同的维度有不同的类:Vector3D、Vector5D 和 VectorND。因此,我有接口(interface)和抽象类来描述 Sum、Subtraction 等方法。对于操作结果,我创建一个新的对象 Vector,将坐标放在求和/减法等之后。所以这里是代码部分作为示例:
interface sample
{
Vector Sum(Vector vec);
Vector Subtraction(Vector vec);
int Product(Vector vec);
boolean Compare(Vector vec);
String ToString();
}
abstract class Vector implements sample
{
int[] coordinates;
public Vector (int[] coordinates)
{
this.coordinates=coordinates;
}
protected abstract Vector resVec();
public Vector Sum(Vector vec)
{
Vector result = resVec();
if (this.coordinates.length == vec.coordinates.length)
{
for (int i = 0; i< vec.coordinates.length; i++)
{
result.coordinates[i] = this.coordinates[i] + vec.coordinates[i];
}
}
else
{
throw new ArithmeticException("Can't sum vectors of different length");
}
return result;
这里是 protected abstart Vector resVec(); - 创建新 vector 的方法,其长度取决于我们操作的 vector 的维度。 Vector3D的实现示例:
class Vector3D extends Vector
{
public Vector3D(int n1,int n2,int n3)
{
super(new int[]{n1,n2,n3});
}
public Vector3D resVec()
{
Vector3D resVec = new Vector3D(0,0,0);
return resVec;
}
所以在这里我创建了一个长度为 3 的新 vector 并用零填充它。我需要为 VectorND 创建相同的 vector 。像这样:
class VectorND extends Vector
{
public VectorND(int...n)
{
super(n);
}
public VectorND resVec()
{
VectorND resVec = new VectorND();
return resVec;
}
有什么想法可以传递未声明的零个数吗?或者也许有不同实现的想法?谢谢!
最佳答案
在 resVec() 方法中,您可以填充 0 数组,然后将其传递给 Vector super 构造函数。由于您的 super 构造函数需要一个整数数组,因此您可以执行以下操作:
public VectorND resVec(int n)
{
int[] coordinates = new int[n];
Arrays.fill(coordinates, 0);
VectorND resVec = new VectorND(coordinates);
return resVec;
}
关于Java,创建一个对象 vector ,编译后其数组中应有n个零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52742704/