如何检查代码(java-eclipse)中变量的更新/更改位置?
我在调试我的代码时遇到了一些问题,因为我无法确定数组的更新位置。我已经浏览了我所有的班级档案,我完全搞不懂到底发生了什么 目前我有一个设置,可以读取csv文件并将内容存储在2D数组中(如何检查代码(java-eclipse)中变量的更新/更改位置?,java,arrays,debugging,variables,Java,Arrays,Debugging,Variables,我在调试我的代码时遇到了一些问题,因为我无法确定数组的更新位置。我已经浏览了我所有的班级档案,我完全搞不懂到底发生了什么 目前我有一个设置,可以读取csv文件并将内容存储在2D数组中(publicstaticdouble[]myArray)。然后,每当用户按下按钮时,我就将这个数组传递给一个方法 奇怪的是,它在第一次就可以正常工作,但是在随后的所有点击按钮时,数据都发生了变化,我不知道为什么。我已经搜索了代码,除了我将其传递到方法中的地方之外,绝对没有对原始数组(即myClass.myArray
publicstaticdouble[]myArray
)。然后,每当用户按下按钮时,我就将这个数组传递给一个方法
奇怪的是,它在第一次就可以正常工作,但是在随后的所有点击按钮时,数据都发生了变化,我不知道为什么。我已经搜索了代码,除了我将其传递到方法中的地方之外,绝对没有对原始数组(即myClass.myArray=newArray
)的引用
这有什么原因吗?或者,是否有人可以建议一种跟踪变量何时更新/更改的方法
下面是代码的简要概述
读入csv数据集并将其保存在变量中(ClassA
):
这是用于设置按钮操作的代码:
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
new RunProgram().execute(); // create a swing worker to run the code in bg
}
});
以下是SwingWorker类中代码的精简版本:
protected Void doInBackground()
{
Config cfgFile = someClass.createConfigFile();
someOtherClass.runMyProgram(cfgFile, ClassA.myDataset);
return null;
}
最后,以下是运行该程序的代码:
public static void runRegression(Config cfgFile, double[][] dataset)
{
// Print out the first line in the array to see if it is the same every time (it should be!)
for(double value : dataset[0])
{
System.out.print( value + " ");
}
System.out.println();
// Do some other stuff....
}
将此数组传递给的每个方法都有机会更改其内容。您的数组是。从大纲或项目视图中,右键单击变量,然后选择“切换观察点” (您还可以设置条件断点,这很方便。)
不需要对原始数组进行引用,对静态(可变)对象的任何引用都可以操纵其内容。因此,我不能确定到底发生了什么,因为您似乎在处理2d对象和类,我对它们有非常基本的理解 然而,听起来您的问题并不是真正的2d方面,而是它所使用的数据的存储。听起来你的按钮是个问题,或者是在按下按钮之前,因为你还没有给我们代码,我想没有人能帮你 尝试为按钮创建一个临时旁路,这样它只会自动触发一次,然后看看会发生什么 至于调试,通常的方式是
System.out.println("Array changed " + myArray[0] +" "+ myArray[1] );
这将在控制台上打印一行
数组已更改14
(如果myArray[0]==0
和myArray[1]==4
)
如果没有看到一些代码,我就无法再帮助您了,我想其他人也帮不上忙。您可以发布您的有问题的代码吗?SSCCEplease@reseter我为你添加了一些代码。嗨,戴夫,这真的很有用,谢谢你!我刚刚试过,似乎使用变量的唯一点就是我提到的两个(用它调用方法&第一次将csv文件读入)。我不明白出了什么问题!感谢您的帮助-我的问题在于我制作阵列副本的方式。我现在已经能够解决这个问题。再次感谢!
System.out.println("Array changed " + myArray[0] +" "+ myArray[1] );