如何使用C#中的方法存储变量?

时间:2016-05-11 21:00:08

标签: c# methods boolean try-catch do-while

我在下面的代码中遇到了一些问题。我还在学习,我不知道如何解决它。

1.我想要做的是创建一个方法(GetInt)来存储变量,就像我试图在第二个方法(GetTrack)中那样进入我的main方法。< / p>

2. - 当无效输入时我无法循环GetInt方法,我猜测try / catch和boolean thingy有什么问题

谢谢

//Get int Method
static public void GetInt(string sPrompt, int iMin, int iMax)
{
    int iNum;
    bool bError = false;

    do
    {
        bError = true;
        try
        {
            Console.Write(sPrompt);
            iNum = int.Parse(Console.ReadLine());
            if ((iNum < iMin) || (iNum > iMax))
            {
                Console.WriteLine("The value is out of range.");
                bError = true;
            }
        }
        catch (ArgumentException)
        {
            Console.WriteLine("An invalid number was entered, please try again.");
            bError = true;
        }
    }
    while (bError == false);
}

//Get Track Method
static public void GetTrack()
{
    int iMin;
    int iSec;

    iMin = GetInt("Enter the minutes: ", 0, 10);
    iSec = GetInt("Enter the seconds: ", 0, 59);
}

3 个答案:

答案 0 :(得分:6)

GetInt的开头,您立即将bError设置为true。这很可能是假的,所以你实际上会循环,因为你没有把它设置为假。

此外,您不会从该方法返回任何内容,因此您无法获得任何回报。您必须更改方法以返回int,并在获得该值时实际返回该值。

答案 1 :(得分:0)

您的GetInt方法的声明应更改为以下内容:

//Get int Method
static public int GetInt(string sPrompt, int iMin, int iMax)

从do ... while循环的开头删除bError = true;语句。 在do ... while循环之后,添加以下语句:

return iNum;

此外,您的while条件应该从bError == false更改为bError == true或简单地更改为bError,这意味着同样的事情,如果您的目的是继续提示用户直到输入可以接受。

答案 2 :(得分:0)

以下是我从控制台“获取”用户输入的方法:

            string choice = string.Empty;
            bool goodChoice = false;

            while (!goodChoice)
            {
                Console.Clear();
                Console.WriteLine(string.Empty);
                Console.WriteLine("Do you really want to hurt me?");
                Console.WriteLine(string.Empty);
                Console.WriteLine(string.Empty);
                Console.WriteLine("Please Y or N (or 0 to exit)");
                choice = Console.ReadLine().Trim();

                if (choice.Equals("Y", StringComparison.OrdinalIgnoreCase))
                {
                    goodChoice = true;
                }

                if (choice.Equals("N", StringComparison.OrdinalIgnoreCase))
                {
                    goodChoice = true;
                }

                if (choice.Equals("0"))
                {
                    goodChoice = true;
                    return; /* exist the routine */
                }
            }

根据您的情况修改

            string choice = string.Empty;
            bool goodChoice = false;

            while (!goodChoice)
            {
                Console.Clear();
                Console.WriteLine(string.Empty);
                Console.WriteLine("Enter an Integer between {0} and {1}", minValue, maxValue);
                Console.WriteLine(string.Empty);
                Console.WriteLine(string.Empty);
                Console.WriteLine("Please enter an integer (or X to exit)");
                choice = Console.ReadLine().Trim();

                int intParseResult = 0;
                bool intParseAttempt = int.TryParse(choice, out intParseResult);
                if(!intParseAttempt)
                {
                    goodChoice = false;
                }
                else
                {
                        if ((intParseResult < minValue) || (intParseResult > maxValue))
                        {
                                        Console.WriteLine("Out of Range");
                        }
                        else
                        {
                            goodChoice = true;
                        }
                }

                if (choice.Equals("X"))
                {
                    goodChoice = true;
                    return -99999; /* you'll have to figure out how to handle exits on your own */
                }
            }