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

标签 c# loops if-statement int

我试图理解方法是如何工作的,我以为我已经把它记下来了,但似乎我没有这样做,因为我的 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/

相关文章:

c - 找出数字的数字总和(在c中)

if-statement - 编写 ASP If 语句的更好方法

c - 查找字符串中整数的长度

c# - 英孚。在没有 DbContext 的情况下调用实体验证

c# - 如何使用数据库列的值检查组合框的文本

c# - 无法理解 ViewModel 和模型之间的区别

javascript - 构造函数内的循环有什么问题? [JS]

matlab - 为什么颜色会随着 MATLAB轮廓循环而变化?

带有 if else 条件的 Python 列表理解

c# - 在 Lucene 中索引多个表