gpt4 book ai didi

C# 控制台应用程序错误 - 无法识别/正确评估返回的 int

转载 作者:行者123 更新时间:2023-11-30 22:09:46 25 4
gpt4 key购买 nike

我试图了解方法是如何工作的,我以为我把它记下来了,但似乎我没有,因为我的 RunSelect(); 方法没有达到我希望的效果。在第 19 行,我要求用户选择值(1 或 2)并将其作为 int 返回(运行)。然后在第 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();
}
}
}

最佳答案

问题:您没有存储 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()方法是该方法的局部变量,因此即使您将值分配给 run它不会反射(reflect)到runPlay() 中声明的变量功能。

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com