2013-03-22 113 views
0

我有以下代碼:條件語句,以及如何增加一個變量

public static int Compute(string a, string b, bool ignoreCase) 
{ 
    // Allocate distance matrix 
    int[,] d = new int[a.Length + 1, b.Length + 1]; 

    // Get character comparer 
    CharComparer isEqual = (ignoreCase) ? 
     (CharComparer)CharCompareIgnoreCase : CharCompare; 

    // Compute distance 
    for (int i = 0; i <= a.Length; i++) 
     d[i, 0] = i; 
    for (int j = 0; j <= b.Length; j++) 
     d[0, j] = j; 
    for (int i = 1; i <= a.Length; i++) 
    { 
     for (int j = 1; j <= b.Length; j++) 
     { 
      if (isEqual(a[i - 1], b[j - 1])) 
      { 
       // No change required 
       d[i, j] = d[i - 1, j - 1]; 
      } 
      else 
      { 
       d[i, j] = 
        Math.Min(d[i - 1, j] + 1, // Deletion 
        insertions= Math.Min(d[i, j - 1] + 1, // Insertion 
        substitutions= d[i - 1, j - 1] + 1));  // Substitution 
      } 
     } 
    } 

的鍵位是在與意見缺失,插入和取代的底部,我想知道我怎麼可以添加一個變量遞增器因此每次檢測到刪除錯誤時,變量都會增加一個。我已經試過:

{   d[i, j] = 
    deletion= Math.Min(d[i - 1, j] + 1, // Deletion 
     insertions= Math.Min(d[i, j - 1] + 1 + insertion ++, // Insertion 
     substitutions= d[i - 1, j - 1] + 1));  // Substitution 
} 

但只是沒有運氣

+8

這是一個非常糟糕的編程習慣混合計算和這樣的副作用;它使代碼很難閱讀。如果您想執行計算,請執行計算並*然後*遞增計數器。 – 2013-03-22 20:02:57

+0

埃裏克是正確的:只是將這個怪物單一的聲明重組爲多個,你會很容易實現你的目標!如果它變得太複雜,你不能理解 - 簡化。 – usr 2013-03-22 20:06:13

+0

可疑類似於http://stackoverflow.com/q/15559578/56778 – 2013-03-22 20:12:23

回答

0

正如埃裏克說:分割聲明成多的人。

else 
    { 
     substitutions = d[i - 1, j - 1] + 1; 
     insertions = Math.Min(d[i, j - 1] + 1, substitutions); 
     deletion = Math.Min(d[i - 1, j] + 1, insertions); 
     d[i, j] = deletion; 

     if (/* whatever */) 
      counter++; 
    } 

非常肯定它會像以前一樣做同樣的事情,但我不知道你想要計算所有行始終執行的是什麼。

-1

我同意@Eric和@usr的觀點,但是如果你一心想在一個聲明中這樣做(我知道一行的心態,我自己就是它的受害者!),你可以這樣做(免責聲明:我還沒有測試過):

Math.Min(d[i, j - 1] + 1 + (++insertion - insertion) 

++用增加插入值並返回新值。所以它會像x - x = 0,因此不會影響較大的語句。

編輯

對不起球員。該解決方案僅適用於執行短路的三元運算符,而OP的問題使用函數調用,因此每次都會疏忽,從而導致計數器的目的失效。

+0

雖然這樣的怪物很有趣,它總是會評估不是想要的增量。 – usr 2013-03-22 20:15:50

+0

@usr:我明白了。感謝您指出。 – dotNET 2013-03-22 20:21:50