Прежде всего, моя проблема в значительной степени аналогична описанной там: Массив, возвращающий одинаковые значения для всех индексов , за исключением того, что это для Java, а не для C #. (Что я слышал довольно похоже)
В игре несколько классов, я постараюсь рассказать подробнее:
SomeInterface: интерфейс для различных типов пикселей.
PixelTypeA: один тип пикселя.
PixelTypeB: другой тип пикселя.
(PixelTypeA и PixelTypeB реализуют / наследуют от SomeInterface)
PixelImage: это проблемный класс, он содержит двухмерный массив, который имеет одинаковые значения для всех квадратов, вот объявление:
SomeInterface[][] pixels;
Теперь конструктор делает следующее для выделения памяти (высота и ширина являются параметрами):
pixels = new SomeInterface[height][width];
Пока все хорошо. Но затем в PixelImage вызывается метод для загрузки пикселей из файла PPM. Этот код работает правильно, потому что если я проверяю значение пикселя сразу после его сохранения в памяти (в цикле readfile), все в порядке. Однако я понял, что после каждой итерации цикла (т.е. после сохранения каждого пикселя в памяти) все значения массива пикселей имеют одинаковое значение, и это значение последнего сохраненного пикселя. Вот важный код в цикле:
pixels[row][col] = new PixelTypeA( pixelValue );
Как я уже сказал, если я выполняю системную печать пикселей [row] [col] на следующей строке, в ней будет правильное значение, хотя и у всех других индексов в двумерном массиве пикселей это значение тоже есть. row и col увеличиваются правильно. Я совершенно новичок в Java, и я предполагаю, что я что-то упустил из-за ссылок или чего-то подобного, что заставляет меня случайно обновлять весь массив пикселей на каждой итерации цикла readfile (или это может быть объявление / инициализация в чем проблема?). Я пытался решить это самостоятельно в течение нескольких часов, но это стало очень неприятно. Я изменил имена и не могу дать вам полный код, так как это задание, и я хочу сделать это сам, мне просто нужны подсказки, что может вызвать такое странное поведение прямо сейчас.
Спасибо!