繁体   English   中英

C#将用户输入传递给方法,并输出结果(从主输出)?

[英]C# Pass user input to method, and output result (from the main)?

相当新,所以请原谅这个问题。 我编写了一种方法来获取字符串,将其隐式转换为数字,然后返回该数字的阶乘。 很好 它的调用方法和打印结果使我感到困惑。 这是代码:

static void Main(string[] args)
{
    Console.WriteLine("Type number to do factorial on..");
    var calc = Fact(Console.ReadLine());
    Console.WriteLine("The answer is " + calc);
}

private static string Fact(string numFact)
{
    var number = 1;
    int factorial = Convert.ToInt32(numFact);
    for (int i = 1; i<= factorial; i++)
    {
        number *= i;
    }
   // Console.WriteLine(number); added to test it works
    return numFact;
}

有人可以帮忙吗? 从外观上您可能会猜到,如果我输入5,则返回5。

static void Main(string[] args)
{
    Console.WriteLine("Type number to do factorial on..");
    var calc = Fact(Console.ReadLine());
    Console.WriteLine("The answer is " + calc);
}

private static int Fact(string numFact)
{
    var number = 1;
    int factorial = Convert.ToInt32(numFact);
    for (int i = 1; i<= factorial; i++)
    {
        number *= i;
    }
   // Console.WriteLine(number); added to test it works
    return number;
}

如评论所述,

  • 您将返回numFact而不是number
  • 为了更好的练习,应该使它返回一个int而不是string ,尽管这并不是完全必要的,但由于它是一个数字,因此感觉更加自然。 一旦需要将其设置为字符串,就将其设置为字符串,过早这样做可能会在以后导致问题; 但是,由于这是一个非常小的项目,因此可能性很小,您也可以这样做。

您应该对日志进行更深入的了解。 您仅记录了2个关键变量中的1个,因此没有从日志中获得所需的答案。 另外,将Console.Readline()排除在等式之外。 使用硬编码号码。 最终,您可以编写测试。 结帐测试驱动开发 (TDD),非常适合此练习。

只需修改没有TDD的日志,就可以显示以下内容:

static void Main(string[] args)
{
    //Console.WriteLine("Type number to do factorial on..");
    int sampleNumber = 5;
    string sampleNumberAsString = sampleNumber.ToString();
    var calc = Fact(sampleNumberAsString);
    Console.WriteLine("Outside fact the answer is " + calc);
}


private static int Fact(string numFact)
{
    var number = 1;
    int factorial = Convert.ToInt32(numFact);
    for (int i = 1; i <= factorial; i++)
    {
        number *= i;
    }
    Console.WriteLine($"Inside Fact() local variable number is {number}");//Inside Fact() local variable number is 120
    Console.WriteLine($"Inside Fact() numFact parameter is is {numFact}");//Inside Fact() numFact parameter is is 5
    //return numFact;//Clearly I want to return the calculated value (number) not the original value passed in (numFact)
    //I'm calculating a number so let's not worry about what the caller does with the number
    //Change the return type to int.
    return number;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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