1

当谈到 C# 时,我显然是一个新手,以下程序来自 Charles Petzold 的一本书,我并不完全理解。该GetDouble方法中的参数是一个名为prompt 的字符串。没有任何地方宣布这一点,我认为这就是让我感到困惑的原因。我看到 Main 方法正在调用GetDouble并将三个字符串打印到控制台,但这整件事对我来说看起来很奇怪。这是典型的编程设计,还是不是行业标准,而是为了展示如何完成?这本书并没有给出任何答案。我初出茅庐的编程自我不会将字符串传递给 Main 方法。有人可以帮我理顺吗?

using System;

class InputDoubles
{
    static void Main()
    {
        double dbase = GetDouble("Enter the base: ");
        double exp = GetDouble("enter the exponent: ");
        Console.WriteLine("{0} to the power of {1} is {2}", dbase, exp, Math.Pow(dbase, exp));
    }

    static double GetDouble(string prompt)
    {
        double value = Double.NaN;
        do
        {
            Console.Write(prompt);
            try
            {
                value = Double.Parse(Console.ReadLine());
            }
            catch
            {
                Console.WriteLine();
                Console.WriteLine("you enter an invalid number!");
                Console.WriteLine("please try again");
                Console.WriteLine();

            }
        }

        while (Double.IsNaN(value));
        return value;

    }
}
4

3 回答 3

3

没有任何地方宣布这一点,我认为这就是让我感到困惑的原因。

等等,它就在那里声明 - 在方法的标题中:

static double GetDouble(string prompt)
//                      ^^^^^^^^^^^^^ This is the declaration of prompt

prompt与您看到的其他变量的不同之处在于它不是普通变量:它是方法的形式参数

与使用赋值运算符显式初始化和赋值的常规变量不同=,形式参数是通过调用方法来隐式赋值的。当您调用该方法时,您将一个带有实际参数的表达式传递给它,它充当该表达式对形参的赋值。想象一下,prompt变量是"Enter the base: "在第一次调用之前赋值的,然后"enter the exponent: "在第二次调用之前赋值,以了解调用时发生了什么GetDouble

于 2012-09-18T14:35:26.157 回答
1

GetDouble(string)方法就是这样做的——它从输入中得到一个双精度值。
提示给用户的文本是一个参数,因为要输入两个不同的值:第一个是基数,第二个是指数。
通过使提示成为参数,该GetDouble(string)方法可以处理从提示用户输入到返回值的所有事情。
另一种方法是在GetDouble(string). 这两种选择中的哪一种更可取是个人喜好问题。

哦,正如您现在可能已经想到的那样,这与方法中的异常处理无关。

于 2012-09-18T14:35:04.113 回答
0

你可以这样改变它。它的作用相同,但我认为更容易理解:

static void Main()
{ 
    string messageForDbaseParam="Enter the base: ";
    double dbase = GetDouble(messageForDbaseParam);
    string messageForExpParam ="enter the exponent: ";
    double exp = GetDouble(messageForExpParam);
    Console.WriteLine("{0} to the power of {1} is {2}", dbase, exp, Math.Pow(dbase, exp));
}


static double GetDouble(string prompt)
{
    double value = Double.NaN;
    Boolean incorrectValue=true;
    while(incorrectValue)
    {
        Console.Write(prompt);
        try
        {
            value = Double.Parse(Console.ReadLine());
            incorrectValue=false;
        }
        catch 
        {
            Console.WriteLine("error");
        }
    }        
    return value;

}
于 2012-09-18T14:47:21.007 回答