Return 数字总和输出中的语句

Return statement in a digit sum output

所以我需要一种方法,它基本上会要求用户输入数字。然后它会检查从 0 到 1000 的所有数字和 return 数字总和等于用户给出的数字的数字。

我不确定我的代码是否正确以及是否有效,因为 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);

        }

所以如果我的代码看起来像这样(如上),它总是 return 一个空字符串,因为它在方法的开头是空的。

但是如果我这样写代码(如下),我会收到一条消息:

not all code paths return a value

 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);
}