[英]Return statement in a digit sum output
因此,我需要一种基本要求用户输入数字的方法。 然后它将检查从0到1000的所有数字,并返回数字总和等于用户给出的数字的数字。
我不确定我的代码是否正确以及它是否有效,因为由于return语句无法按我预期的方式工作,因此我很难检查它。
public static string stevilo()
{
Console.WriteLine("Enter your number! ");
string vnos = Console.ReadLine();
int x = Convert.ToInt32(vnos);
int sum = 0;
string a= " ";
foreach (var n in Enumerable.Range(0,1000))
{
if (n.ToString().ToCharArray().Sum(c => c - '0') == sum)
a = a + n.ToString();
}
return (a);
}
因此,如果我的代码看起来像这样(上面),它将始终返回一个空字符串,因为该字符串在方法的开头是空的。
但是,如果我这样编写代码(如下),则会收到一条消息:
并非所有代码路径都返回值
public static string stevilo()
{
Console.WriteLine("Enter your number! ");
string vnos = Console.ReadLine();
int x = Convert.ToInt32(vnos);
int sum = 0;
string a= " ";
foreach (var n in Enumerable.Range(0,1000))
{
if (n.ToString().ToCharArray().Sum(c => c - '0') == sum)
a = a + n.ToString();
return (a);
}
}
错误在这一行
if (n.ToString().ToCharArray().Sum(c => c - '0') == sum)
应该
if (n.ToString().ToCharArray().Sum(c => c - '0') == x)
当然,您需要一种更好的输出格式。 因此,我建议使用StringBuilder更好地处理代码所需的字符串连接。
public static string stevilo()
{
Console.WriteLine("Enter your number! ");
string vnos = Console.ReadLine();
int x = Convert.ToInt32(vnos);
StringBuilder sb = new StringBuilder();
foreach (var n in Enumerable.Range(0,1000))
{
if (n.ToString().ToCharArray().Sum(c => c - '0') == x)
sb.Append(n.ToString() + ",");
}
if(sb.Length > 0) sb.Length--;
return sb.ToString();
}
另外,如果您想使用LinQ完全隐藏foreach循环,则存在这种变化
public static string stevilo()
{
Console.WriteLine("Enter your number! ");
string vnos = Console.ReadLine();
int x = Convert.ToInt32(vnos);
var list = Enumerable.Range(0, 1000)
.Where(z => z.ToString()
.ToCharArray()
.Sum(c => c - '0') == x);
return string.Join(",", list);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.