条件语句以及如何增加变量

时间:2013-03-22 20:00:41

标签: c# increment conditional-statements

我有以下代码:

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
            }
        }
    }

关键位在底部,注释删除,插入和替换,我想知道如何在其上添加变量incrementor,因此每次检测到删除错误时,变量增加1。我试过了:

{           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
}

但是没有运气

2 个答案:

答案 0 :(得分: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 :(得分:-1)

我同意@Eric和@usr,但为了防止你在一个声明中这么做(我知道单行的心态,我自己也是它的受害者!),你可以做它(免责声明:我还没有测试过):

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

++,增加插入值并返回新值。所以它就像x - x = 0,因此不会影响较大的声明。

修改

对不起伙计们。该解决方案仅适用于执行短路的三元运算符,而OP的问题使用函数调用,因此每次都会消失,从而扼杀了计数器的目的。