0

正直に言うと、これは宿題の一部です。私はまったくごまかすつもりはありません。それどころか、割り当ての約 60% を完了しましたが、作成/使用する必要があるメソッドの仕様で何が求められているのか理解できず、行き詰まっています。

背景: この割り当てには、2 つのクラスを持つプログラムの作成が含まれます。1 つはメインで、もう 1 つは VectorADT と呼ばれます。VectorADT クラス (簡潔に言うと) は、2 つのインスタンス変数配列 (この割り当ての範囲内の「ベクトル」) と、両方の配列を操作するためのいくつかのインスタンス メソッド (いくつかの静的メソッドも存在します) を持つことになっています。

私の問題: 私が書かなければならない 1 つの方法は、配列の対応するスロットを追加することによって、両方のベクトル (この場合は配列) を合計することになっています。両方の配列は同じサイズであると想定されます! 私はなんとかこれをすべて行った後、指定された 2 つの VectorADT パラメーター (v1 + v2) の合計を含む VectorADT を返すように求められました。VectorADT を返すとはどういう意味ですか? クラス名じゃないの?この場合、この add メソッドに渡したオブジェクトの型は? add メソッドで return ステートメントを指定する必要があることと、return を (メイン メソッドで) 何に割り当てる必要があるか物理的に理解していません。

メソッドの仕様: public static VectorADT add(VectorADT v1, VectorADT v2) 指定された 2 つの VectorADT の合計を生成して返します。ベクトル加算は、各ベクトルの対応する要素を加算して和ベクトルの対応する要素を取得することによって定義されることに注意してください。

パラメータ: v1 - 最初の VectorADT v2 - 2 番目の VectorADT

前提条件: v1 および v2 によって参照される VectorADT オブジェクトはインスタンス化されており、両方とも同じサイズです。

戻り値: 指定された 2 つの VectorADT パラメーター (v1 + v2) の合計を含む VectorADT。

例外: IllegalArgument - v1 または v2 が null であることを示します。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...
}

ヘルプやガイダンスをいただければ幸いです。ありがとうございました

4

5 に答える 5

1

メソッドがクラス自体を返すのではなく、クラスのインスタンス (オブジェクト) を返すことができるという事実から、理解が途切れているようです。

public static VectorADT add(VectorADT one, VectorADT two) 

このメソッド シグネチャは、このメソッドが VectorADT 型の 2 つのオブジェクトを受け取り、VectorADT 型のオブジェクトを返すことを示しています。おそらく、返されるこのオブジェクトは、メソッドを呼び出すものに返す目的で、メソッドのある時点で作成する新しいオブジェクトになります。

VectorADT myVectorADT = new myVectorADT(..) //define a new object
//Do some stuff to make myVectorADT have the proper values, for example summing vector one and two's elements
return myVectorADT;  //return it!

最初に、提供された各オブジェクトが null でないことを確認してください

if (one == null || two == null) //throw something

次に、メソッドで新しいベクターを作成し、ベクター 1 + ベクター 2 の要素を入力してから、上記のように返します。

これは役立つかもしれない例です、それは自己完結型です

class A {
    public int value;
    public A(int k) {  //Constructor
        value = k;
    }
}

上記のようなメソッドを定義しましょう

public static A addMethod (A one, A two) { //Method returns class type A, accepts two variables of type A
    A returnObject = new A(one.value + two.value);
    return returnObject;
}

これは簡単な例ですが、正直なところ、あなたが持っているものとほとんど同じです。上記のメソッドは、次のように呼び出すことができます。

A firstObject = new A(5);
A secondObject = new A(3);
A newObject = addMethod(firstObject, secondObject);

System.out.println(newObject.value); //prints 8
于 2013-07-14T19:32:16.820 に答える
0

ベクトルが計算した合計配列である VectorADT の新しいインスタンスを返すことになっているようです。

それは単にreturn new VectorADT(sum);

これは、ベクトル演算では一般的な操作です。2 つのベクトルの和は 3 番目のベクトルで、その成分は加数ベクトルの 2 つの対応する成分の和です。

于 2013-07-14T19:31:43.703 に答える
0
public class AddVector {
     public static void main(String[] args)
        {
            //blue and yellow are used as an example here.
            int [] blue = {1,4,3,2,}; 
            int [] yellow = {3,5,6,4};
            //initializes vector array using constructor
            VectorADT one = new VectorADT(blue);  
            //initializes vector array using constructor
            VectorADT two = new VectorADT(yellow);
            //what am i supposed assign my return to?
            int sum = VectorADT.add(one, two);
            System.out.println("Sum of vector is : "+sum);
        }    
}

class VectorADT
{
    private int [] vector;
    public VectorADT(int [] intArray)
    {
        vector = intArray;
    }
    public static int add(VectorADT one, VectorADT two) 
    {               
       int total = 0;
       if(one.vector.length == two.vector.length){
           for(int i = 0; i < one.vector.length; i++)
           {
               total += one.vector[i] + two.vector[i];
           }
           return total;
       }else{
           return 0;
       }
    }
}
于 2013-07-14T20:04:48.470 に答える
0

ポイントは、 の新しいインスタンスを作成する必要があるということですVectorADT

以下を使用して作成します。

VectorATD vec=new VectorADT(sum);

必要に応じて、メソッドを呼び出して変更できるようになりました。

それで、

return vec;
于 2013-07-14T19:33:40.510 に答える
0

新しい VectorADT オブジェクトを返す必要があります。

指定された 2 つの 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);)。

それが今はっきりしていることを願っています。

于 2013-07-14T19:34:01.590 に答える