1

私はC#に関しては明らかに初心者であり、次のプログラムは私が完全には理解していないCharlesPetzoldの本からのものです。メソッドのパラメーターは、GetDoublepromptという名前の文字列です。これはどこにも宣言されておらず、それが私を混乱させていると思います。Mainメソッドが呼び出しGetDoubleて、コンソールに3つの文字列を出力していることがわかりますが、この全体が奇妙に見えます。これは典型的なプログラミング設計ですか、それとも業界標準ではありませんが、物事をどのように行うことができるかを示すためのものですか?その本はどちらの方法でも答えを与えていない。私の駆け出しのプログラミング自己は、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変数が割り当てられ、次に 2 番目の呼び出しの前に割り当てられると想像してください。"Enter the base: ""enter the exponent: "GetDouble

于 2012-09-18T14:35:26.157 に答える
1

このGetDouble(string)メソッドはまさにそれを行います - 入力から double を取得します。
入力する値が 2 つあるため、ユーザーに表示されるテキストはパラメーターです。1 つ目は基数、2 つ目は指数です。
プロンプトをパラメーターにすることで、GetDouble(string)メソッドは、ユーザーに入力を求めるプロンプトから値を返すまでのすべてを処理できます。
別の方法として、 の外でユーザーにプロンプ​​トを表示することもできますGetDouble(string)。これら 2 つのオプションのどちらが好ましいかは、好みの問題です。

ああ、もうお気づきかもしれませんが、これはメソッド内の例外処理とは関係ありません。

于 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 に答える