4

スイッチ/ケース内でforループを使用できますか?

コード例:

String[,] drinks = new String[,] { { "Cola", "20" }, { "Fanta", "20" }, { "Sprite", "20" }, { "Tuborg", "25" }, { "Carlsberg", "25" } };


switch (menuChoice)
{
  case 0:
    Console.WriteLine("Goodbye!");
    Thread.Sleep(500);
    Environment.Exit(0);
    break;
    for (int i = 0; i < drinksCount; i++)
    {
      case i+1:
      buyDrink(drinks[i,0];
      break;
    }

(より多くのコードとメソッドがこれらの間にあります)

基本的に、このマシンが販売する飲み物を使用して配列を作成し、次にこれらの飲み物を選択するメニューを作成しますが、GUI内で飲み物を追加する機能も作成します。

これも可能ですか?

4

5 に答える 5

4

switch ステートメント内でループを使用できますが、現在使用している方法では使用できません。コードを以下のコードに置き換えてみてください。

if (menuChoice == 0)
{
    Console.WriteLine("Goodbye!");
    Thread.Sleep(500);
    Environment.Exit(0); 
}
else if (menuChoice > 0 && menuChoice < drinksCount)
{         
    buyDrink(drinks[menuChoice, 0]);
}

追加した:

貴重なコメントによると、次のように、Exit の menuChoice として -1 を使用してみませんか。

if (menuChoice == -1)
{
    Console.WriteLine("Goodbye!");
    Thread.Sleep(500);
    Environment.Exit(0);
}
else if (menuChoice > 0 && menuChoice <= drinksCount)
{
    buyDrink(drinks[menuChoice - 1, 0], Convert.ToDouble(drinks[menuChoice - 1, 1]));
}

このようにして、次のように静的メソッドを呼び出すことができます。

static void buyDrink(String drink, double drinkPrice)
于 2012-10-15T18:38:09.863 に答える
3

この質問のより適切なタイトルは次のようになります: Is it possible to have a variable case statement?

  case i+1:

これは無効なケース ステートメントです。case ステートメントの値は定数でなければなりません。この場合i、定数であれば許容されます。ただし、そうでiはないため、case ステートメントはコンパイルされません。

そうは言っても、タイトルの質問への答えはイエスですが、他の答えで示されているように、ここでの本当の答えは次のとおりです。あなたがやろうとしている方法ではありません。

于 2012-10-15T18:55:46.563 に答える
2

ブレーク後にコードがあるのは意味がありません。

ケースから抜け出し、どのように実行されると思いますか?

case 0:
  {   
    break;//If you break here, it exits the block.. your loop never executes
    for (int i = 0; i < drinksCount; i++)
    {
      case i+1:
      buyDrink(drinks[i,0];
      break;
    }
   }

そして、たとえそれが可能であったとしても、私は要点を見落としています。0より大きい限り、ケースを実行しますよね?では、 を使用してif statement、自分自身や他の人を助けてみませんか?

if(menuChoice ==0)
{ 
   //dosomething
}
else if(menuChoice >0)
{
  //buy drink
}
于 2012-10-15T18:36:28.610 に答える
2
if(menuChoice == 0) {
    Console.WriteLine("Goodbye!");
    Thread.Sleep(500);
    Environment.Exit(0);
} else if(menuChoice > 0 && menuChoice <= drinksCount) {
    buyDrink(drinks[menuChoice - 1, 0]);
}
于 2012-10-15T18:39:48.837 に答える
1

そのコードはまったく機能しませんでした。
ブレークは、ケースの最後の (そして必須の) ステートメントです。
あなたの例を見ると、簡単に書くことができます

if(menuChoice == 0)
{
    Console.WriteLine("Goodbye!"); 
    Thread.Sleep(500); 
    Environment.Exit(0); 
}
else
{
    buyDrink(drinks[menuChoice-1,0]); 
}

編集: 静的メソッドとしての buyDrink と必要なパラメーターについてのコメントを見て、buyDrink メソッドが定義されているクラス名の前に buyDrink への呼び出しを変更し、価格のパラメーターを (double 値として) 追加する必要があります。

.......
else
{
    BeverageClass.buyDrink(drinks[menuChoice-1,0], Convert.ToDouble(drinks[menuChoice-1,1])); 
}
于 2012-10-15T18:40:34.920 に答える