我在调试代码时遇到一些问题,因为我无法解决数组更新的问题。我仔细查看了所有课程文件,并且对于发生的事情感到非常难过。
目前我有一个设置,我在其中读取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....
}
答案 0 :(得分:1)
传递此数组的每个方法都有机会更改其内容。你的数组是not immutable。
答案 1 :(得分:1)
在大纲或项目视图中,右键单击变量,然后选择“切换观察点”。
(您也可以设置条件断点,这很方便。)
不需要引用原始数组,任何对静态(可变)对象的引用都可以操作其内容。
答案 2 :(得分:0)
因此,我无法确定发生了什么,因为您似乎正在处理2d对象和类,我对它们有非常基本的了解。
然而,听起来你的问题并不是真正的第二方面,而是它所使用的数据的存储。它听起来像你的按钮是问题,或者按钮被按下之前,因为你没有给我们代码,我认为没有人可以帮助你。
尝试为按钮进行临时旁路,这样它只会自动触发一次,看看会发生什么。
至于调试,通常的方法是说
System.out.println("Array changed " + myArray[0] +" "+ myArray[1] );
这将在控制台上的一行中打印
Array changed 1 4
(如果myArray[0] == 0
和myArray[1] == 4
)
如果没有看到某些代码,我就无法帮助你,我认为其他任何人都无法提供帮助。