gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 13:31:32 27 4
gpt4 key购买 nike

我不太擅长编程,但现在,我需要编写一个小的 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 数组后,将它们写入三个主数组(dataR、dataG、dataB)。是的,我确保 rbt.getPixelColor 接收到的数据与以前不同。

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

最佳答案

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

这篇文章对于复制二维数组很有帮助: copy a 2d array in java

关于Java - 旧数组总是等于新数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52063323/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com