Причиной проблемы, которую вы видите, является то, как вы инициализируете массив.Вы передаете один только что инициализированный массив в вызове метода, который используется в качестве значения для каждой строки.
# Your initialization
@test = Array.new(size, Array.new(size));
# The following is equivalent, and perhaps more illustrative of what's happening
@a = Array.new(size)
@test = Array.new(size, @a) # effective result => [@a, @a, @a, @a, @a]
Так что в вашем методе, когда вы перебираете строки, вы постоянноизменение значений одного и того же массива.
Чтобы исправить это, создайте новый массив для каждой строки, а не 1 массив, на который ссылаются 5 раз.Это может быть выполнено с использованием варианта инициализации блока Array
.Что-то вроде:
@test = Array.new(size) { Array.new(size) }
Проверьте документы для более подробного объяснения различных методов инициализации массива.