2012-06-16 78 views
-3

我有這個代碼和它的工作,但我希望它返回具有四個值的dailyTotals列表,目前它正在返回三個值...我似乎無法弄清楚如何使它返回四個值的dailyTotals。 BTW billTotalsdateList是相同的長度,目前是7,他們會增長。 billTotalsdateList將總是保持相同的長度如何計算每日總量?

List<double> dailyTotals = new List<double>(); 

     string dateValue = ""; 
     double oneDayTotal = 0; 
     int n = 0; 

     for (int i = 0; i < billTotals.Count; i += n) 
     { 
      dateValue = dateList[i]; 
      oneDayTotal = 0; 

      while (dateValue == dateList[n]) 
      { 
       oneDayTotal += billTotals[n]; 

       n++; 
      } 

      dailyTotals.Add(oneDayTotal); 
     } 

     return dailyTotals; 

[編輯]:對不起,我應該寫這之前:在數據庫中我有billTotals以及用於存儲每個紙幣的日期/ 。所以,一個日期可以有多個賬單與之關聯。我試圖做的是抓住一個月的數據,並總結每一天的總數。所以我在while循環中使用的邏輯應該總計總數,而日期是一樣的......我希望這可以讓場景更清晰。 :)

+0

您是否嘗試調試代碼並查看哪些值正在分配給每個var?有時候很難從代碼中分辨出來,但調試器會告訴你代碼實際發生了什麼。 – Mayank

+0

此代碼是在一個DLL文件,我似乎無法得到調試器:/ – Haseeb

+0

我接近投票-1這樣一個非信息性的標題。如果你仔細想想,它可能適用於這裏發佈的幾乎所有問題。 – spender

回答

2

你永遠不會重置n,所以你越來越多地增加我,跳過一些數字。

您需要在循環內設置n = 0

int n = 0; 
for (int i = 0; i < billTotals.Count; i += n) 
{ 
    dateValue = dateList[i]; 
    oneDayTotal = 0; 

    n = 0; // This counts the number of equal dates. 
    while (i + n < dateList.Length && dateValue == dateList[i + n]) 
    { 
     oneDayTotal += billTotals[i + n]; 
     n++; 
    } 

    dailyTotals.Add(oneDayTotal); 
} 

return dailyTotals; 

您也可以完全重寫代碼來簡化代碼並避免這種增加循環變量的奇怪方式。我建議創建同時按住日期和總對象的數組,那麼你可以使用LINQ來解決你的問題,沒有任何複雜的循環:

var dailyTotals = datesAndTotals 
    .GroupBy(x => x.Date) 
    .Select(g => g.Sum(x => x.BillTotal)) 
    .ToList(); 

您還可以使用Zip,而不是創建一個單獨的類,儘管它在課堂上會更具可讀性。

+0

我得到一個'索引超出範圍'異常:/ – Haseeb

+0

@Raiden:是的,有一個缺少檢查。現在修復了,但正如我所說的,要完全拋棄所有複雜的代碼,並在我的答案結尾處用簡單的表達式替換它會好得多。它做同樣的事情,但沒有所有複雜的循環邏輯。 –

+0

問題是,我對linq不太好,所以它沒有出現在我的腦海裏+我無法理解所寫的內容:(你能解釋一下嗎 – Haseeb