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