2

申し訳ありませんが、私はプログラミングの世界ではまったくの初心者です。摂氏を華氏に、またはその逆に変換するかどうかについて、基本的に入力を受け取るコンソール アプリケーションを作成しています。

私が直面している問題は次のとおりです。

「エラー 3 'choice' という名前のローカル変数は、'choice' に別の意味を与えるため、このスコープでは宣言できません。これは、'親または現在の' スコープで別のものを示すために既に使用されています」

他の例を見てみましたが、今のところ私の脳が理解できるよりもはるかに複雑でした。

namespace TemperatureApp
{
    class Program
    {
        static void Main(string[] args)
        {
            int choice;

            do
            {
                Console.WriteLine("Hi! This is a temperatue app");
                Console.WriteLine("Press 1 for C to F or 2 for F to C");
                //take the user input
                int choice = Convert.ToInt32(Console.ReadLine());


                if (choice == 1)
                {
                    Console.WriteLine("Great, you chose C to F. Now enter the temp.");
                    int celcius = Convert.ToInt32(Console.ReadLine());
                    //next line use the formula and show answer
                }
                if (choice == 2)
                {
                    Console.WriteLine("Great, you chose F to C. Now enter the temp.");
                    int fahrenheit = Convert.ToInt32(Console.ReadLine());
                    //next line use the formula and show answer
                }
                else
                    Console.WriteLine("That is not the right choice.");
                    //In this way, keep asking the person for either 1 or two

            }
            while (choice != 1 || choice != 2);

            Console.ReadLine();
        }
    }
}
4

5 に答える 5

6
int choice = Convert.ToInt32(Console.ReadLine());

読むべき

choice = Convert.ToInt32(Console.ReadLine());

int2 回目に挿入すると、{} 内で「choice」という別の変数を宣言することになります。その定義は、すぐ外側のものと矛盾しています。

于 2013-02-08T20:58:12.003 に答える
1

それはすべてエラーメッセージにあります。同じスコープ内で選択変数を2回宣言しています。

コンソール入力から値を読み取るときは、変数を再宣言する必要はありません。変数を設定するだけです。詳しく説明するには:

int choice; // declare variable

do
{
    int choice = ...; // re-declare variable
}

2 行目では、変数を再宣言するのではなく、値を割り当てたいので、次の行を置き換えるだけです。

int choice = ...

choice = ...
于 2013-02-08T21:00:25.787 に答える
1

私が直面している問題は次のとおりです。

「「選択」という名前のローカル変数は、このスコープでは宣言できません。これは、「親または現在の」スコープで他の何かを示すために既に使用されている「選択」に別の意味を与えるためです」.

他の例を見てみました

例を見るのではなく、エラーとコードを見るべきです。C# コンパイラのメッセージは非常に使いやすく、これも非常に明確です。使用されている言語を理解するだけです。

「choice」という名前のローカル変数は宣言できません

次のような変数を宣言します: -loopvariable-type variable-name内のエラー行で発生します。do

int choice = Convert.ToInt32(Console.ReadLine());

ここで、変数をその型として宣言intします。削除すると、その行が割り当てになります。これが必要です。の結果が-変数に代入 (=) されます。宣言した後にのみ変数を割り当てることができますが、コードの早い段階で既に行っています。したがって、エラーは次のように表示されます。intintConvert.ToInt32(Console.ReadLine())choice

「選択」に別の意味を与えるため、「親または現在の」スコープで他の何かを示すために既に使用されています

コードを調べると、親スコープ( 内static void Main()) で同じ名前の変数が宣言されていることがわかります。

int choice;

ここで、変数を宣言する必要があるのは 1 回だけであり、これは通常、できるだけ小さなスコープで行うことが望ましいことを知っておく必要があります。あなたの場合、-loopの外にもアクセスする必要があるため、 intbeforeを削除するだけです。int choice = Convert.ToInt32(Console.ReadLine());choicedo

于 2013-02-08T21:06:15.813 に答える
0

別のローカル変数と同じ名前のローカル変数を持つことはできません。より大きな非ローカル スコープ (クラス メンバーなど) の変数と同じ名前のローカル変数を持つことができますが、その場合、ローカル変数はより大きなスコープの変数を隠します。

あなたがしたいことはint、2つ目を脱ぐことchoiceです。再宣言する必要はありません。割り当てたいだけです。

choice = Convert.ToInt32(Console.ReadLine());
于 2013-02-08T20:59:24.977 に答える
0

選択変数の宣言をサイクル スコープから外してみてください。このような:

   int choice;

   do
    {
        Console.WriteLine("Hi! This is a temperatue app");
        Console.WriteLine("Press 1 for C to F or 2 for F to C");
        //take the user input
        choice = Convert.ToInt32(Console.ReadLine());


        if (choice == 1)
        {
            Console.WriteLine("Great, you chose C to F. Now enter the temp.");
            int celcius = Convert.ToInt32(Console.ReadLine());
            //next line use the formula and show answer
        }
        if (choice == 2)
        {
            Console.WriteLine("Great, you chose F to C. Now enter the temp.");
            int fahrenheit = Convert.ToInt32(Console.ReadLine());
            //next line use the formula and show answer
        }
        else
            Console.WriteLine("That is not the right choice.");
            //In this way, keep asking the person for either 1 or two

    }
    while (choice != 1 || choice != 2);

    Console.ReadLine();
}

}

于 2013-02-08T20:58:41.407 に答える