坦率地说,这是家庭作业的一部分。我根本不想作弊。相反,我已经完成了大约60%的任务,现在我很困,因为我不明白规范中对我必须编写/使用的一种方法的要求。
背景:
分配涉及编写一个具有2个类的程序,一个是main,另一个是VectorADT。 VectorADT类(简而言之)仅具有两个实例变量数组(在此分配范围内为“向量”),以及一些用于操纵两个数组的实例方法(也存在一些静态方法)。
我的问题:
我必须编写的一种方法应该是通过添加数组的相应插槽来将两个向量(在这种情况下为数组)相加。假定两个数组的大小相同!我设法完成了所有这些工作,然后要求我返回一个VectorADT,其中包含两个给定的VectorADT参数(v1 + v2)的总和。返回VectorADT是什么意思?那不是班级的名字吗?在这种情况下,我传递给此add方法的对象的类型?我实际上不了解add方法中的return语句应该是什么,以及(在我的main方法中)应该将return分配给什么。
该方法的规范:
公共静态VectorADT add(VectorADT v1,VectorADT v2)
生成并返回两个给定VectorADT的总和。注意,矢量加法是通过将每个矢量的相应元素相加以获得总和矢量的相应元素来定义的。
参数:
v1-第一个VectorADT
v2-第二个VectorADT
前提条件:
v1和v2引用的VectorADT对象已实例化,并且具有相同的大小。
返回值:
一个VectorADT,其中包含两个给定VectorADT参数(v1 + v2)的总和。
抛出:
IllegalArgument-指示v1或v2为空。
InvalidSizeException-指示v1和v2的大小不同。
我写的代码:
class VectorOperations
{
public static void main(String[] args)
{
//blue and yellow are used as an example here.
int [] blue = new int [12];
int [] yellow = new int [12];
//initializes vector array using constructor
VectorADT one = new VectorADT(blue);
//initializes vector array using constructor
VectorADT two = new VectorADT(yello);
//what am i supposed assign my return to?
something????? = VectorADT.add(one, two);
}
}
public class VectorADT
{
private int [] vector;
public VectorADT(int [] intArray)
{
//constructor that initializes instance variable vector.
//vector ends up being the same size as the array in the
//constructors parameter. All slots initialized to zero.
}
public static VectorADT add(VectorADT one, VectorADT two)
{ //I used one and two instead of v1 and v2
//some if statements and try-catch blocks for exceptions i need
//if no exceptions thrown...
int [] sum = new int [one.vector.length]; //one and two are same length
for(int i = 0; i < one.vector.length; i++)
{
sum[i] = one.vector[i] + two.vector[i];
}
return //Totally confused here :(
}
//other methods similar to VectorADT add() also exist...
}
任何帮助或指导将不胜感激。谢谢
最佳答案
您应该返回一个新的VectorADT对象。
当要求您返回包含两个给定VectorADT参数(v1 + v2)之和的VectorADT时,实际上是在要求您返回VectorADT类的对象(新实例),而不是类本身。
在您的情况下,将使add方法像这样:
public static VectorADT add(VectorADT one, VectorADT two)
{
int [] sum = new int [one.vector.length];
for(int i = 0; i < one.vector.length; i++)
{
sum[i] = one.vector[i] + two.vector[i];
}
return new VectorADT(sum);
}
在主要方法上:
VectorADT sum = VectorADT.add(one, two);
其中“ sum”是要用于保存VectorADT对象的变量的名称。
当您放入
new VectorADT(sum)
时,您正在调用构造函数,即public VectorADT(int [] intArray)
。如您所见,它接收到一个int[]
,并如您所说,将其放入实例变量向量中。您将传递给它的int[] sum
传递给它,以接收两个向量的总和(sum[i] = one.vector[i] + two.vector[i];
)当您将其作为方法的返回值时,它将返回您刚刚创建的新VectorADT对象,无论您在何处调用该方法,这两个参数的总和。因此,当您在main上调用它时,该方法将返回一个新的VectorADT,因此您将VectorADT设置为声明的变量的类型(
VectorADT sum = VectorADT.add(one, two);
)。希望现在清楚了。