以数字和输出返回语句

时间:2015-04-05 09:05:20

标签: c# sum return digit

所以有一种我需要的方法基本上会要求用户输入数字。然后它将检查从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);

            }

        }

1 个答案:

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