怎么可能我的阵列坏了?

时间:2012-12-14 10:56:15

标签: java arrays

我有这段代码:

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”-loop时,阵列被打破了,好像我添加到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;


}

2 个答案:

答案 0 :(得分:1)

也许会发生这样的事情?

resultlot = new lot(mWaferarray); // Problem actually occurs in the constructor you did not show us
resultlot.print();// Problem only manifests itself here.

答案 1 :(得分:1)

看起来像某种作业: - )

问题在于:

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

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

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

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

要解决这个问题,你必须在循环中创建新的晶圆(可能还有新的bytearrays)。