如何在代码(java-eclipse)中检查变量的更新/更改位置?

时间:2011-11-11 14:21:50

标签: java arrays debugging variables

我在调试代码时遇到一些问题,因为我无法解决数组更新的问题。我仔细查看了所有课程文件,并且对于发生的事情感到非常难过。

目前我有一个设置,我在其中读取csv文件并将内容存储在2D数组(public static double[][] myArray)中。然后,每当用户按下按钮时,我都会将此数组传递给方法。

奇怪的是它第一次运行正常,但是在按钮的所有后续点击中数据已经改变,我无法解决原因。我搜索了代码,除了将其传递给方法之外,绝对没有引用原始数组(即myClass.myArray = newArray)。

这是否有原因发生?或者,有人可以建议一种方法来跟踪变量何时更新/更改?

以下是代码的简要概述......

读入csv数据集并将其保存在变量(ClassA)中:

public static double[][] myDataset;

// ...    

private static void readdDataset(String filePath)
{
    CsvReader reader = new CsvReader();
    myDataset = reader.readDataset(filePath, true);
}

这是用于设置按钮操作的代码:

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....
}

3 个答案:

答案 0 :(得分:1)

传递此数组的每个方法都有机会更改其内容。你的数组是not immutable

答案 1 :(得分:1)

在大纲或项目视图中,右键单击变量,然后选择“切换观察点”。

(您也可以设置条件断点,这很方便。)

不需要引用原始数组,任何对静态(可变)对象的引用都可以操作其内容。

答案 2 :(得分:0)

因此,我无法确定发生了什么,因为您似乎正在处理2d对象和类,我对它们有非常基本的了解。

然而,听起来你的问题并不是真正的第二方面,而是它所使用的数据的存储。它听起来像你的按钮是问题,或者按钮被按下之前,因为你没有给我们代码,我认为没有人可以帮助你。

尝试为按钮进行临时旁路,这样它只会自动触发一次,看看会发生什么。

至于调试,通常的方法是说

System.out.println("Array changed " + myArray[0] +" "+ myArray[1]  );

这将在控制台上的一行中打印

Array changed 1 4(如果myArray[0] == 0myArray[1] == 4

如果没有看到某些代码,我就无法帮助你,我认为其他任何人都无法提供帮助。