为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

波斯汪 2021-08-19 13:39:01
    我不太擅长编程,但现在,我需要编写一个小 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 收到的数据与以前不同。请帮助我,我现在真的很沮丧,但需要继续前进。
查看完整描述

2 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

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


查看完整回答
反对 回复 2021-08-19
?
交互式爱情

TA贡献1712条经验 获得超3个赞

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

你试过数组复制吗?

System.arraycopy()

要么

Arrays.copyOf()

您的代码如下所示:

oldDataR = Arrays.copyOf(dataR);

编辑

我错过了数组的多维,只需按照@khachik 链接建议即可处理二维。


查看完整回答
反对 回复 2021-08-19
  • 2 回答
  • 0 关注
  • 181 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信