2011-07-12 31 views
0

初始化多維數組我試圖初始化多維數組。這是我的語法;這不會產生錯誤,但它也不會存儲所有值。雖然正確地打印出在這個片段中的所有記錄,如何在VB.NET

 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」記錄每個「我」的記錄。爲什麼是這樣?再經過這幾年的記錄,許多類似日期日期空出現:「1/1/0001」

那麼,爲什麼所有的記錄出現在上半部分,而不是從低?我錯誤地將值插入到這個數組中了嗎?它不必具有固定的行數,只需要固定數量的列。

+0

什麼版本的vb.net? –

回答

1
Dim arrWeekYear(5000, 1) As Date 

這是一個多維數組,但第二維只有2的大小!而你通過j這是在你的代碼總是0訪問它。這是沒有意義的。那真的是你想要的嗎?我建議你在你的數組中使用一個數據結構,而不是一個多維數組。

事實上,你幾乎從來沒有想用一個多維數組。完全一樣。複雜的對象幾乎總是更合適。唯一真正的例外是當你真的想存儲一個數學矩陣。

+0

有時他使用j + 1,但我同意這很愚蠢。如果你要硬編碼數學,只是對索引進行硬編碼 - 或者建議一個真實的對象。 –

+0

同意,在線性數組中使用「Structure {FirstWeek,FirstDay}」。 – ja72

1

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 

而且,由於回覆於()是在asp.net令人難以接受的,你可以藉此更進一步,分配Enumerable.Range ()調用作爲asp:repeater控件的數據源,如果您使用的是webforms而不是mvc。

0

在第一部分中,您將填充陣列,在同一陣列行中寫入7次值。 在一項測試中(2011年1月1日至2011年3月3日),前21項任務是:

i | 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 | 08/01/2011 | 1 | 01/01/2011

1 | 0 | 08/01/2011 | 1 | 02/01/2011

1 | 0 | 08/01/2011 | 1 | 03/01/2011

1 | 0 | 08/01/2011 | 1 | 04/01/2011

1 | 0 | 08/01/2011 | 1 | 05/01/2011

1 | 0 | 08/01/2011 | 1 | 06/01/2011

1 | 0 | 08/01/2011 | 1 | 07/01/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)

在第二部分中,您將得到所寫的值: i | j |值| j + 1 |值

0 | 0 | 01/01/2011 | 1 | 31/12/2010

1 | 0 | 08/01/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 | 12/02/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部分增加一些值?!?