0

私は独学で C# を学んでいて、温度計算機を作成するというアイデアを思いつきました。do-while ループを使用して、ユーザーが有効なメニューを選択できるようにしたいと考えています。私がやろうとしたことは次のとおりです。

do
{
  //etc etc etc;
} (while menuChoice != 1||2||3);

言い換えると、menuChoice が 1、2、または 3 でない限り、ループの内側にあることをやり続けます。VS2010 Express は、それはできないと教えてくれます。これをそのように行う方法はありますか、それとも何か他のことをしなければなりませんか? これを行う方法に関する提案はありますか、それとも他の解決策を使用する必要がありますか?

4

5 に答える 5

5
do { // stuff
} while (menuChoice != 1 && menuChoice != 2 && menuChoice != 3);
于 2011-01-24T06:22:28.930 に答える
3
do {
    // etc.
} while(menuChoice != 1 &&
        menuChoice != 2 &&
        menuChoice != 3
  );

接続詞の各句は、評価結果が になる式である必要がありますbool!= 2は に評価される式ではないことに注意してくださいbool。実際、それは法的な表現でさえありません。これが、指定する必要がある理由ですmenuChoice != 2

&&また、 because句を使用する必要があることに注意してください。あなたはmenuChoice1 に等しくしたい、または 2 に等しくしたい、または 3 に等しくしたい。

!(menuChoice == 1 || menuChoice == 2 || menuChoice == 3)

whileループの条件として。DeMorgan の法則により、これは

menuChoice != 1 && menuChoice != 2 && menuChoice != 3
于 2011-01-24T06:22:55.033 に答える
1

編集:

これはどう?これにより、連続していない数のセットを持つことができ、100 万個の || を持つよりもはるかに拡張性があります。ステートメント...:

int[] menuOptions = { 1, 2, 3 };

...

while(!menuOptions.Contains(menuChoice))
于 2011-01-24T06:23:25.697 に答える
0

または:

do {
    // etc.
} while(menuChoice > 3 || menuChoice < 1);
于 2011-01-24T06:24:15.433 に答える
-1

もう1つの解決策を提供するために:

using System.Collections.Generic; // for the List<T>
do
{
}
while (!(new List<Int32>(new[]{ 1, 2, 3 })).Contains(menuChoice));

はい、これは最善の解決策ではありませんが、代替手段です (オプションのリストが大きくなった場合に役立ちます)。

于 2011-01-24T06:27:01.567 に答える