Java - 旧数组总是等于新数组?

  • 本文关键字:数组 于新 Java java arrays
  • 更新时间 :
  • 英文 :


我不是很擅长编程,但现在,我需要编写一个小的Java应用程序,我遇到了一个奇怪的问题。几个小时以来,我一直在尝试解决这个问题。

问题是这样的: 我正在将少量屏幕 (20x20( 保存到我的程序中。我通过循环遍历每个像素,通过Java.awt.robot将其RGB保存到数组中来做到这一点。使用以下函数,程序应在获取屏幕的新区域之前将复制的图像保存到 3 个数组(R、G 和 B((我想稍后比较它们并查找更改(。该死的事情:在覆盖主数组之前保存数据的旧数组总是在我没有告诉他们的情况下覆盖。

private void fillArrayData(){
oldDataR = dataR;   <----- The problem is here. These arrays are now overwritten with the
oldDataG = dataG;   <----- current data, just before I write stuff to dataR, G and B.
oldDataB = dataB;   <----- As you see, I don't modify oldDataR, G, B later on.
scanArea.x = MouseInfo.getPointerInfo().getLocation().x;
scanArea.y = MouseInfo.getPointerInfo().getLocation().y;
for(int i = 0; i<scanSize; i++){
for(int n = 0; n<scanSize; n++){
dataR[i][n] = (rbt.getPixelColor(scanArea.x+i, scanArea.y+n)).getRed();
dataG[i][n] = (rbt.getPixelColor(scanArea.x+i, scanArea.y+n)).getGreen();
dataB[i][n] = (rbt.getPixelColor(scanArea.x+i, scanArea.y+n)).getBlue();
}
}
}

即使我以后再也不访问oldDataR,oldDataG和oldDataB,但在这个空白结束后,它每次都等于dataR,dataG和dataB。这没有意义,因为我在将新数据保存到旧数据数组后将它们写入三个主要数组(dataR、dataG、dataB(。是的,我确保rbt.getPixelColor接收的数据与以前不同。

请帮助我,我现在真的很沮丧,但需要继续前进。

发生这种情况是因为oldDataR(和其余部分(只是指向同一数组的另一个变量,如果您想将旧值单独保留在数组中,并修改原始值,则需要复制它。

这篇文章对复制二维数组很有帮助: 在 Java 中复制二维数组

您将数组作为引用传递,因此,最终它是两个变量指针中的相同数组。

你试过阵列拷贝吗?

System.arraycopy()

Arrays.copyOf()

您的代码如下所示:

oldDataR = Arrays.copyOf(dataR);

编辑

我错过了数组的多维,只需按照链接建议进行操作@khachik以便您可以处理两个维度。

最新更新