作者:赵顺帆_705 | 来源:互联网 | 2023-06-29 11:25
在此示例中,我对解决方案有疑问。
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;
}
除负数外,其他所有方法都有效,因为我的程序返回0而不是-15
您可以在循环中检查输入内容,这就是出错的地方。
我修改了您的代码,并将检查从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
而不是字符串。字符串类是不可变的,这意味着每次添加/修改string
时,实际上就是在内存中创建一个新的string
对象。在类似情况下,string
被反复修改,您应该避免为每次修改创建string
的开销。为此,您可以使用StringBuilder
类。
另外,您可以通过使用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
然后使用Enumerable.Range生成从0到n的所有数字。
还有String.Join,没有“是否是最后一个元素?我还需要一个+吗?”。
然后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