我试图理解方法的工作原理,我以为我已经失望了,但似乎我不喜欢我的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赋值,它也不会反映到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);

10-07 20:38