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

    我不太擅长编程,但现在,我需要编写一个小 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,但在此 void 完成后,它每次都等于 dataR、dataG 和 dataB。这是没有意义的,因为我在将新数据保存到 oldData-Arrays 后将新数据写入三个主要数组(dataR、dataG、dataB)。是的,我确保 rbt.getPixelColor 收到的数据与以前不同。


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


波斯汪
浏览 182回答 2
2回答

慕雪6442864

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

交互式爱情

您将数组作为引用传递,因此,最终它是两个变量指针中的同一个数组。你试过数组复制吗?System.arraycopy()要么Arrays.copyOf()您的代码如下所示:oldDataR&nbsp;=&nbsp;Arrays.copyOf(dataR);编辑我错过了数组的多维,只需按照@khachik 链接建议即可处理二维。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java