繁体   English   中英

以数字总和输出的返回语句

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM