我试图了解方法是如何工作的,我认为我把它弄下来但似乎我没有因为我的 RunSelect(); 方法没有按照我的意愿行事。在第19行,我要求用户选择值(1或2)并将其作为int(Run)返回。然后在第25行,我们根据所选的int执行if / if else / else语句。无论选择什么,都无法识别int并要求用户再次尝试 - 无论我输入什么,都无法识别,因此我的控制台方法失败,我不确定它是什么我做错了。
我已经尝试过追踪我的代码,将其打印出来进行分析,让它在晚上睡觉。我迷路了,为什么它不起作用。我是新手,任何帮助都非常感激。我认为问题不在于我的循环或方法,我认为这是我如何将int移交给if语句。但是我很遗憾为什么它不像我想的那样工作。
感谢并欢呼所有人提供任何帮助
这是我的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace a032_Factorial_Fibonacci_Sequencer
{
class Program
{
String command = "";
//Need to get the runSelect to work as method
public void Play()
{
Announcer("+ + + Welcome To MegaCorps Factorial Fibioci Sequencer + + +\n\n");
int run = 0;
do
{
RunSelect(run);
if (run == 1) { RunFact(); }
else if (run == 2) { RunFib(); }
else
{
Announcer("Non Valid Selection");
RunSelect(run);
}
Announcer("Enter 'Y' to Run another sequence? ");
command = Console.ReadLine().ToLower().Trim();
}
while (command == "y" || command == "yes");
}
//HelperMethods
public String Announcer(String strTxt)
{
Console.WriteLine(strTxt);
return strTxt;
}
public int RunSelect(int run)
{
Announcer("Enter '1' to run Factor | Enter '2' to run Fibioci");
run = int.Parse(Console.ReadLine());
return run;
}
public void Closer()
{ Console.Read(); }
public void RunFact()
{
//craft program to factor a number entered and return factor
//use double not int to handle factored numbers larger then 57+
Console.WriteLine("Factorial Sequencer Entered/n/n");
Announcer("Enter A Number to FACTOR: ");
double num = double.Parse(Console.ReadLine());
double numNew = 1;
for (int i = 1; i <= num; i++)
{ numNew = numNew * i; }
Announcer("\nFACTORED result: " + numNew);
}
public void RunFib()
{
//craft program to fib a number entered and return fib
//use double not int to handle factored numbers larger then 57+
Console.WriteLine("Fibioci Sequencer Entered\n");
Announcer("Enter A Number to FIBIOC: ");
double iSequence = double.Parse(Console.ReadLine());
Announcer("\nFIBIOC result: ");
double iPrevious = -1;
double iNext = 1;
for (int i = 1; i <= iSequence; i++)
{
double iSum = iNext + iPrevious;
iPrevious = iNext;
iNext = iSum;
Console.Write(iNext + ", ");
}
}
static void Main(string[] args)
{
Program myProgram = new Program();
myProgram.Play();
}
}
}
答案 0 :(得分:1)
问题:您没有存储RunSelect()
方法的返回值。
解决方案:您需要存储RunSelect()
Method.otherwise变量run
值的返回值不会被修改(即使在调用{{1}之后仍然为零方法)。
替换它:
RunSelect()
用这个:
RunSelect(run);
编辑:如果您正在调用返回某些内容的方法,则需要读取/存储该方法的run=RunSelect(run);
值,因为它包含修改后的值。
步骤1:在您的代码中使用以下语句初始化变量return
:
run
第2步:在int run = 0;
循环内,您调用了do-while
方法,如下所示:
RunSelect()
方法 do
{
RunSelect(run);
------
中的 第3步:您使用以下语句为RunSelect()
变量分配了run
给出的实际用户输入:
注意:此处console
方法中的运行变量是该方法的局部变量,因此即使您将值赋给RunSelect()
,它也不会反映到run
在run
函数中声明的变量。
Play()
第4步:您要将修改后的变量值public int RunSelect(int run)
{
Announcer("Enter '1' to run Factor | Enter '2' to run Fibioci");
run = int.Parse(Console.ReadLine());/here you are assigning userinput to run variable.
return run;
}
发回给此方法的调用方(run
):
第5步:您没有将RunSelect()
方法发送的return
值再次存储到RunSelect()
变量中,如下所示:
run
所以RunSelect(run);
变量仍具有初始化值run
。
要使其正常工作,您只需存储zero
方法的返回值,如下所示:
RunSelect()
答案 1 :(得分:1)
你有一个Function接受一个值参数并返回一个int,但是你没有将return int分配给任何东西。在您的情况下,参数是多余的,因为它无论如何都不在方法中使用。在C#中,默认情况下,参数是值参数。这意味着在函数成员声明中为变量创建了一个新的存储位置,它以您在函数成员调用中指定的值开始。如果更改该值,则不会更改调用中涉及的任何变量。
试试这个:
public int RunSelect()
{
Announcer("Enter '1' to run Factor | Enter '2' to run Fibioci");
int run = int.Parse(Console.ReadLine());
return run;
}
并在您的方法调用中:
int run = RunSelect();
无需在通话前预先初始化投放,因此您可以删除第int run = 0;
行
答案 2 :(得分:1)
当您致电RunSelect(run)
时,您不会更改run
的当前值。传入run
无法改变其价值。 RunSelect
函数返回一个您必须分配的新值:run = RunSelect(run)
。
另外,您会注意到RunSelect
没有使用传入的run
值,因此可以像这样轻松地编写:
public int RunSelect()
{
Announcer("Enter '1' to run Factor | Enter '2' to run Fibioci");
int run = int.Parse(Console.ReadLine());
return run;
}