为什么如果我在方法中输入一个负数,条件 else if 不捕获它

why if I enter a negative number in the method, condition else if does not catch it

我对这个例子的解决方案有疑问。

Input:>6 
Output:0+1+2+3+4+5+6 = 21 

Input:> -15 
Output:-15<0  

Input:>0  
Output:0=0
public static string ShowSequence(int n)
{
    int sumInt = 0;
    string sum = "";
    for (int i = 0; i <= n; i++)
    {
        if (n == 0)
        {
            sum += i + "=";
        }
        else if (n < 0)
        {
            sum += n + "<";
        }
        else
       if (i == n)
        {
            sum += i + " = ";
        }
        else
            sum += i + "+";
        sumInt += i;
    }
    sum += sumInt;
    return sum;
}

除负数外一切正常,因为我的程序 return 0 而不是 -15<0。感谢您的帮助!

你在循环中检查你的输入,这就是它出错的地方。 我修改了您的代码,将检查从 for 循环中拉出,并提前返回以避免混淆。

https://dotnetfiddle.net/gLmo62

public static string ShowSequence(int n)
    {
        if (n == 0)
        {
            return n + "=";
        }

        if (n < 0)
        {
            return n + "<";
        }

        int sumInt = 0;
        string sum = "";
        for (int i = 0; i <= n; i++)
        {
            if (i == n)
            {
                sum += i + " = ";
            }
            else
            {
                sum += i + "+";
            }

            sumInt += i;
        }

        sum += sumInt;
        return sum;
    }

当数字为负时,您的循环条件 i <= n; 在第一次迭代开始前失败。因此,执行永远不会达到 if/else 条件。

您可以在进入循环之前用条件检查重写该方法。

public static string ShowSequence(int n)
{
        if (n == 0)
        {
            return n + "=";
        }

        if (n < 0)
        {
            return n + "<";
        }

        int sumInt = 0;
        StringBuilder sum = new StringBuilder();
        for (int i = 0; i <= n; i++)
        {
            sum.Append($"{i}{(i==n?" = ":"+")}");
            sumInt += i;
        }
        sum.Append(sumInt);
        return sum.ToString();
}

请注意,我还使用了 StringBuilder,而不是字符串。字符串 class 是不可变的,这意味着每次您 append/modify 一个 string,您实际上是在内存中创建一个新的 string 对象。在这种情况下,string 被重复修改,您应该避免为每次修改创建 string 的开销。为此,您可以使用 StringBuilder class.

作为附加说明,您可以通过使用 Linq 进一步减少代码。例如,

public static string ShowSequence(int n)
{
    if (n == 0)
    {
        return n + "=";
    }

    if (n < 0)
    {
        return n + "<";
    }

    var strBuilder = new StringBuilder();
    strBuilder.Append(Enumerable.Range(0, n+1)
                               .Select(x => x.ToString())
                               .Aggregate((a, b) => a + "+" + b));
    strBuilder.Append($" = {(n*(n+1))/2}");
    return strBuilder.ToString();
}

您可以简单地说明特殊情况:n == 0, `n < 0.
然后使用Enumerable.Range生成从0到n的所有数字。
String.Join,没有 "Is that the last elements? Do I need one more + ?".
Enumerable.Sum 计算总和。

你最终会得到一个非常简单的代码。

public static string ShowSequence(int n)
{
    if (n == 0)
    {
        return n + " = 0";
    }

    if (n < 0)
    {
        return n + " < 0";
    }

    // generate all numbers from 0 to n. Takes n+1 steps. 
    var enumeration = Enumerable.Range(0, n+1);

    var plusOperatorConcatenation = String.Join(" + ",  enumeration ) ;

    return plusOperatorConcatenation + " = " + enumeration.Sum();
}

现场演示:https://dotnetfiddle.net/Iu0vyf