Как инициализировать многомерный массив в VB.NET - PullRequest
0 голосов
/ 13 июля 2011

Я пытаюсь инициализировать многомерный массив.Вот мой синтаксис;это не создает ошибок, но также не хранит все значения.Хотя он правильно печатает все записи в этом фрагменте,

        dFirstWeek = CDate(FirstWeek)
        dFirstWeek = DateAdd(DateInterval.WeekOfYear, -1, dFirstWeek)

        Dim dFirstDay As Date
        Dim arrWeekYear(5000, 1) As Date
        Dim i As Integer = 0
        Dim j As Integer = 0
        dFirstDay = dFirstDay.AddDays(1)

        While dFirstWeek <= dLastWeek
            dFirstDay = dFirstWeek
            dFirstWeek = dFirstWeek.AddDays(7)

            While dFirstDay < dFirstWeek
                arrWeekYear(i, j) = (dFirstWeek)
                arrWeekYear(i, j + 1) = (dFirstDay)

                Response.Write(arrWeekYear(i, j).ToString("d"))
                Response.Write("           ;")
                Response.Write(arrWeekYear(i, j + 1).ToString("d"))
                Response.Write("<br>")
                dFirstDay = dFirstDay.AddDays(1)
                j = 0
            End While
            i = i + 1
        End While

далее в этом коде, я пытаюсь перепечатать этот массив следующим образом:

            i = 0
            j = 0
            Dim k As Integer = 0
            'Response.Write(arrWeekYear.GetLength(0))

            While k < arrWeekYear.GetLength(0) - 2
                Response.Write(arrWeekYear(i, j).ToString("d"))
                Response.Write("           ;")
                Response.Write(arrWeekYear(i, j + 1).ToString("d"))
                Response.Write("<br>")
                j = 0
                i = i + 1
                k = k + 1
            End While

, но на этот раз только одна "j "запись появляется в записи" i ".Почему это?И затем после этих нескольких записей появляется много дат, напоминающих нулевые даты: «1/1/0001»

Так почему все записи появляются в верхнем разделе, а не в нижнем?Я неправильно вставил значения в этот массив?И это не должно иметь фиксированное количество строк, только фиксированное количество столбцов.

Ответы [ 3 ]

1 голос
/ 13 июля 2011
Dim arrWeekYear(5000, 1) As Date

Хорошо, это многомерный массив, но второе измерение имеет размер только 2! И вы получаете к нему доступ через j, , который всегда равен 0 в вашем коде. Это бессмысленно. Это действительно то, что вы хотите? Я предлагаю вам использовать структуру данных внутри вашего массива вместо многомерного массива.

На самом деле, вы почти никогда не хотите использовать многомерный массив. Совсем. Сложные объекты почти всегда более уместны. Единственное реальное исключение - когда вы действительно хотите сохранить математическую матрицу.

1 голос
/ 13 июля 2011

Увеличение i внутри внутреннего цикла, а не внутри внешнего цикла.

И еще более простой код (требуется visual studio 2010):

Dim baseDate As Datetime = Convert.ToDatetime(FirstWeek).AddDays(-7)

For Each item In Enumerable.Range(0, (dLastWeek - baseDate).TotalDays / 7) _
      .Select(Function(i) New DateTime() _
           {baseDate.AddDays(i*7), baseDate.AddDays(i*7 + 7) })

    Response.Write(string.Format("{0:d}      ;{1:d}<br/>", item(0), item(1)))
Next item

И поскольку Response.Write () не одобряется в asp.net, вы можете пойти дальше и назначить вызов Enumerable.Range () в качестве источника данных для элемента управления asp: repeater, если вы используете веб-формы а не mvc.

0 голосов
/ 15 июля 2011

В первой части вы заполняете массив, записывая 7 раз значение в одной строке массива. В тесте (с 01.01.2011 по 03.03.2011) первые 21 заданий:

я | J | значение | j + 1 | значение

0 | 0 | 01.01.2011 | 1 | 25/12/2010

0 | 0 | 01.01.2011 | 1 | 26/12/2010

0 | 0 | 01.01.2011 | 1 | 27/12/2010

0 | 0 | 01.01.2011 | 1 | 28/12/2010

0 | 0 | 01.01.2011 | 1 | 29/12/2010

0 | 0 | 01.01.2011 | 1 | 30/12/2010

0 | 0 | 01.01.2011 | 1 | 31.12.2010 конечное значение в массиве (0,0) и (0,1)

1 | 0 | 01.08.2011 | 1 | 01/01/2011

1 | 0 | 01.08.2011 | 1 | 02/01/2011

1 | 0 | 01.08.2011 | 1 | 03/01/2011

1 | 0 | 01.08.2011 | 1 | 04/01/2011

1 | 0 | 01.08.2011 | 1 | 05/01/2011

1 | 0 | 01.08.2011 | 1 | 06/01/2011

1 | 0 | 01.08.2011 | 1 | 01.07.2011 окончательное значение в массиве (1,0) и 1,1)

2 | 0 | 15/01/2011 | 1 | 08/01/2011

2 | 0 | 15/01/2011 | 1 | 09/01/2011

2 | 0 | 15/01/2011 | 1 | 10/01/2011

2 | 0 | 15/01/2011 | 1 | 11/01/2011

2 | 0 | 15/01/2011 | 1 | 12/01/2011

2 | 0 | 15/01/2011 | 1 | 13/01/2011

2 | 0 | 15/01/2011 | 1 | 14/01/2011 окончательное значение в массиве (2,0) и (2,1)

и т.д.

Во второй части вы получите записанные значения: я | J | значение | j + 1 | значение

0 | 0 | 01.01.2011 | 1 | 31/12/2010

1 | 0 | 01.08.2011 | 1 | 07/01/2011

2 | 0 | 15/01/2011 | 1 | 14/01/2011

3 | 0 | 22.01.2011 | 1 | 21/01/2011

4 | 0 | 29.01.2011 | 1 | 28/01/2011

5 | 0 | 05.02.2011 | 1 | 04/02/2011

6 | 0 | 02.12.2011 | 1 | 11/02/2011

7 | 0 | 19.02.2011 | 1 | 18/02/2011

8 | 0 | 26.02.2011 | 1 | 25/02/2011

9 | 0 | 05.03.2011 | 1 | 04/03/2011

10 | 0 | 01/01/0001 | 1 | 01/01/0001 и это значение в остальной части массива.

Я думаю, вы забыли увеличить значение в части 1?!?

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