Изменение значений массива в VB.NET - PullRequest
0 голосов
/ 03 января 2011

Я использую 2D-массив для хранения данных в сетке, и все данные равны нулю.По умолчанию в массиве все нули.Когда я пытаюсь изменить значения в массиве, используя variable(y)(x) = 1, где x и y - целые числа в диапазоне, он меняет значение на 1 во всем столбце, а не только в одной ячейке.

Например:

Public cells(19)() As Integer

'Code to  populate it with zeros goes here

Public Sub modifyCells(ByVal x As Integer, ByVal y As Integer)
    cells(x)(y) = 1
End Sub

Всякий раз, когда я вызываю modifyCells(0,0), я получаю значение каждого подмассива, похожего на это:

1,0,0,0,0,0,0,0,0,0

В то время как я хочу, чтобы это происходило только с первым вложенным массивом (т. Е. Со значением в ячейках (0) (0) = 1 и только с этим значением).

Как мне управлять этим?Заранее спасибо.

(Если есть какая-либо разница, код, используемый для заполнения массива, приведен ниже)

Public Sub clear()
    Dim A1() As Integer = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
    For y = 0 To 19
        cells(y) = A1
    Next
End Sub

Ответы [ 2 ]

1 голос
/ 03 января 2011

Ваша проблема в том, что вы заполняете каждую строку одним и тем же массивом. Вам необходимо переместить определение локальной переменной в цикл:

Public Sub clear()
    For y = 0 To 19
        Dim A1() As Integer = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
        cells(y) = A1
    Next
End Sub
0 голосов
/ 03 января 2011

Вы в основном добавляете ссылку на такой же массив к каждой позиции в cells.

Попробуйте вместо этого:

Public Sub clear()
    For y = 0 To 19         
        cells(y) = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}     
    Next 
End Sub 
...