-1

私はこのコードを持っています:

public lot merge (lot otherlot){
    wafer[] mWaferarray = new wafer[16];
    byte[] bytearray = new byte[16];
    wafer resultwafer = new wafer(bytearray);
    wafer w1;
    wafer w2;
    int i;
    int[][] assignmentmatrix = HungarianAlgorithm.computeAssignments(convertinttofloat (solutionmatrix(otherlot)));

    for (i=0; i != assignmentmatrix.length ;i++){

        w1 = otherlot.getWaferarray()[assignmentmatrix[i][0]];

        w2 = getWaferarray()[assignmentmatrix[i][1]];


        resultwafer.setWafer(w1.wafercompare(w2));

        mWaferarray[i] = resultwafer;
        mWaferarray[i].print();



    }
    System.out.println("HERE\n");
    mWaferarray[5].toString();

    resultlot = new lot(mWaferarray);
    resultlot.print();// Problem occurs here.

    return resultlot;

}

ご覧のとおり、ウェーハの配列 (自己定義クラス) を作成します。次に、これを新しいウェーハで埋めます。この配列 (mWaferarray[i].print()) を印刷すると、必要な結果が得られます。しかし、「for」ループから出ると、配列が壊れていて、mWaferarray に最後に追加した項目がいっぱいになったかのようになります (16 の長さの配列全体がこのウェーハでいっぱいになります)。したがって、このプログラムを実行すると、次のようになります。

1011110010111100
0011011111111110
0111110111101101
1010111001101111
0110110111101111
1010110101111010
1010110111011110
1011111010111100
1111110011101110
0111111111011011
1111111111011010
1101111011111010
1010110101011110
0101111011011010
1011111011011000
0101111011011010
HERE

0101111011011010
0101111011011010
0101111011011010
0101111011011010
0101111011011010
0101111011011010
0101111011011010
0101111011011010
0101111011011010
0101111011011010
0101111011011010
0101111011011010
0101111011011010
0101111011011010
0101111011011010
0101111011011010

ご覧のとおり、アレイが最後のウェーハで満たされているようです。

私はしばらくの間これを見てきました。あなたが私を助けてくれることを願っています。

事前にThx

PS:私の印刷機能は次のように書かれています:

    void print(){
    int j;
    for (j=0; j != waferarray.length ;j++){
        waferarray[j].print();

        }


    }

編集:ロットのコードを追加

ロットクラスの始まりです

public class lot {


wafer[] waferarray = new wafer[16];
lot resultlot;

public lot (wafer wafer1,wafer wafer2,wafer wafer3,wafer wafer4,
        wafer wafer5,wafer wafer6,wafer wafer7,wafer wafer8,
        wafer wafer9,wafer wafer10,wafer wafer11,wafer wafer12,
        wafer wafer13,wafer wafer14,wafer wafer15,wafer wafer16){

    waferarray[0] = wafer1;
    waferarray[1] = wafer2;
    waferarray[2] = wafer3;
    waferarray[3] = wafer4;
    waferarray[4] = wafer5;
    waferarray[5] = wafer6;
    waferarray[6] = wafer7;
    waferarray[7] = wafer8;
    waferarray[8] = wafer9;
    waferarray[9] = wafer10;
    waferarray[10] = wafer11;
    waferarray[11] = wafer12;
    waferarray[12] = wafer13;
    waferarray[13] = wafer14;
    waferarray[14] = wafer15;
    waferarray[15] = wafer16;


}

public lot (wafer[] thiswaferarray){

    waferarray = thiswaferarray;


}
4

2 に答える 2

1

ある種の宿題のように見えます:-)

問題はこれです:

    resultwafer.setWafer(w1.wafercompare(w2));

    mWaferarray[i] = resultwafer;
    mWaferarray[i].print();

resultwafer を再利用している場合、ruseultwafer の内容のみが変更/置き換えられます。

最後に、mWaferarray のすべての要素が同じ resultwafer インスタンスを指し、lass ループ内のコンテンツ セットのみを示します。

これを修正するには、ループ内で新しいウェーハ (および場合によっては新しいバイト配列) を作成する必要があります。

于 2012-12-14T11:26:50.933 に答える
1

ひょっとしたらこんなことになるかも?

resultlot = new lot(mWaferarray); // Problem actually occurs in the constructor you did not show us
resultlot.print();// Problem only manifests itself here.
于 2012-12-14T11:01:25.603 に答える