所以有一种我需要的方法基本上会要求用户输入数字。然后它将检查从0到1000的所有数字并返回具有与用户给出的数字相等的数字总和的数字。
我不确定我的代码是否正确并且它是否有效,因为我检查它的麻烦是因为返回语句并不像我想象的那样工作。
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);
}
}
答案 0 :(得分:5)
错误在此行
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);
}