-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

如您所见,就好像阵列被最后一个晶片填充了一样。

我已经看这个有一段时间了,我希望你能帮助我。

提前谢谢

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

也许它会像这样发生?

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 回答
1

看起来像是某种家庭作业:-)

问题是这样的:

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

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

您正在重用 resultwafer,只有 ruseultwafer 的内容被更改/替换。

最后,mWaferarray 的所有元素都指向同一个 resultwafer 实例,它只显示 lass 循环中的内容集。

要解决此问题,您必须在循环中创建新的晶片(可能还有新的字节数组)。

于 2012-12-14T11:26:50.933 回答