热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

为什么如果我在方法中输入负数,则条件为其他条件(如果未捕获)

在此示例中,我对解决方案有疑问。Input:>6Output:0+1+2+3+4+5+621Input:>-15Outpu

在此示例中,我对解决方案有疑问。

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


推荐阅读
author-avatar
赵顺帆_705
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有