Как я могу проверить, где переменная обновляется / изменяется в моем коде (java - eclipse)? - PullRequest
1 голос
/ 11 ноября 2011

У меня возникают некоторые проблемы при отладке моего кода, так как я не могу понять, где обновляется массив.Я просмотрел все мои файлы классов, и я полностью озадачен тем, что происходит.

На данный момент у меня есть настройка, посредством которой я читаю в файле csv и сохраняю содержимое в двумерном массиве (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 ]

1 голос
/ 11 ноября 2011

На схеме или в виде проекта щелкните правой кнопкой мыши переменную и выберите «Переключить точку наблюдения».

(Вы также можете установить условные контрольные точки, что очень удобно.)

Нет необходимости указывать ссылку на массив original , любую ссылку на статический(изменяемый) объект может манипулировать его содержимым.

1 голос
/ 11 ноября 2011

Каждый метод, которому вы передаете этот массив, имеет возможность изменить его содержимое.Ваш массив не является неизменным .

0 голосов
/ 11 ноября 2011

Так что я не могу точно быть уверенным в том, что происходит, поскольку вы, похоже, имеете дело с двумерными объектами и классами, и у меня есть базовые представления о них.

Однако, похоже, что ваша проблема не в двухмерных аспектах, а в хранении данных, которые она использует. Похоже, что ваша кнопка - это проблема, или это до того, как кнопка нажата, и, поскольку вы не дали нам код, я не думаю, что кто-то может вам помочь.

Попробуйте сделать временный обход для кнопки, чтобы она автоматически запускалась один раз, и посмотрите, что произойдет.

Что касается отладки, то обычный способ сказать:

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

Это напечатает в строке на консоли

Array changed 1 4 (если myArray[0] == 0 и myArray[1] == 4)

Я больше не могу вам помочь, не увидев какой-то код, и я не думаю, что кто-то еще может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...