我试图理解方法是如何工作的,我以为我已经把它记下来了,但似乎我没有这样做,因为我的 RunSelect(); 方法没有达到我希望的效果。在第 19 行,我要求用户选择值(1 或 2)并将其作为 int 返回(运行)。然后在第 25 行,我们根据所选的 int 执行 if/if else/else 语句。无论选择什么,int都不会被识别,并要求用户重试 - 无论我输入什么,它都不会被识别,所以我的控制台方法失败,我不确定我做错了什么。
我尝试过跟踪我的代码,将其打印出来进行分析,花了一整夜的时间来 sleep 。等等我不知道为什么它不起作用。我是新手,非常感谢任何帮助。我不认为问题出在我的循环或方法上,我认为问题在于我如何将 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();
}
}
}
最佳答案
问题:您没有存储 RunSelect()
的返回值方法。
解决方案:您需要存储 RunSelect()
的返回值方法.否则变量 run
值不会被修改(即使调用 RunSelect()
方法后仍然为零)。
替换这个:
RunSelect(run);
有了这个:
run=RunSelect(run);
编辑:如果您正在调用返回某些内容的方法,那么您需要读取/存储 return
该方法的值,因为它包含修改后的值。
第 1 步:在代码中初始化了变量 run
使用以下语句:
int run = 0;
第 2 步: 内 do-while
您已调用的循环 RunSelect()
方法如下:
do
{
RunSelect(run);
------
第 3 步: 在方法 RunSelect()
中您正在分配 run
具有来自 console
的实际用户输入的变量使用以下语句:
注意:此处运行 RunSelect()
中的变量method 是该方法的局部变量,因此即使您将值分配给 run
它不会反射(reflect)到 run
Play()
中声明的变量功能。
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;
}
第 4 步:您将发回修改后的变量值 run
给这个方法的调用者(RunSelect()
):
第 5 步:您没有存储此 return
RunSelect()
发送的值方法再次进入 run
变量如下:
RunSelect(run);
还是这样run
变量将具有初始化值 zero
。
要使其工作,您只需存储 RunSelect()
的返回值即可。方法如下:
run=RunSelect(run);
关于C# 控制台应用程序错误 - 无法识别/正确评估返回的 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21353494/