2017-02-04 5 views
0

と食料品リストを作る、また私は合計項目を正しく追加しているかわからない。どんな助けでも大歓迎です。C#私はプログラムを実行し、どれが本当に混乱しているかを尋ねる7を選択するたびにスイッチステートメント

namespace GoingShopping 
{ 
    class Program 
    { 
     private static int cabbageamount; 
     private static int tomatoamount; 
     private static int cheeseamount; 
     private static int breadamount; 
     private static int milkamount; 
     private static int onionamount; 
     bool isvalid = true; 

     static void Main(string[] args) 
     { 
      String cabbage = "1"; 
      String tomatos = "2"; 
      String Cheese = "3"; 
      String bread = "4"; 
      String milk = "5"; 
      String onion = "6"; 
      String done = "7"; 
      String menu = "1) Cabbage" + System.Environment.NewLine + 
          "2) Tomatos" + System.Environment.NewLine + 
          "3) Cheese" + System.Environment.NewLine + 
          "4) Bread" + System.Environment.NewLine + 
          "5) Milk" + System.Environment.NewLine + 
          "6) Onion" + System.Environment.NewLine + 
          "7) I'm done shopping"; 

      int total = cabbageamount + tomatoamount + cheeseamount + breadamount + milkamount + onionamount; 

      Console.Write("What you like to purchase ? " + System.Environment.NewLine); 
      Console.WriteLine(menu); 
      string wishlist = Console.ReadLine(); 


      while (wishlist != "7") 
      { 
       switch (wishlist) 
       { 
        case "1": 
         Console.WriteLine("How many would you like ? "); 
         string cabbageinput = Console.ReadLine(); 
         //int cabbageinput = Convert.ToInt32(Console.ReadLine()); 
         Console.WriteLine(menu); 
         break; 
        case "2": 
         Console.WriteLine("How many would you like ? "); 
         string tomatoinput = Console.ReadLine(); 
         Console.WriteLine(menu); 

         break; 
        case "3": 
         Console.WriteLine("How many would you like ? "); 
         string cheeseinput = Console.ReadLine(); 
         Console.WriteLine(menu); 

         break; 
        case "4": 
         Console.WriteLine("How many would you like ? "); 
         string breadinput = Console.ReadLine(); 
         Console.WriteLine(menu); 

         break; 
        case "5": 
         Console.WriteLine("How many would you like ? "); 
         string milkinput = Console.ReadLine(); 
         Console.WriteLine(menu); 

         break; 
        case "6": 
         Console.WriteLine("How many would you like ? "); 
         string onioninput = Console.ReadLine(); 
         Console.WriteLine(menu); 

         break; 
        case "7": 
         Console.WriteLine("You have chosen to buy : " + System.Environment.NewLine); 
         Console.WriteLine(cabbageamount + "X" + "Cabbages" + System.Environment.NewLine, 
              tomatoamount + "X" + "Tomatos" + System.Environment.NewLine, 
              cheeseamount + "X" + "Cheese" + System.Environment.NewLine, 
              breadamount + "X" + "Bread" + System.Environment.NewLine, 
              milkamount + "X" + "Milk" + System.Environment.NewLine, 
              onionamount + "X" + "Onions" + System.Environment.NewLine); 
         Console.WriteLine("Giving a total of" + total + "items"); 
         break; 
        default:  
         break; 
       } 
       Console.ReadLine(); 
      } 

     } 
    } 
} 
+0

:)なくなっすべきですか? – Novice

+0

試してみてください:string wishlist = Console.ReadLine()。Trim(); – jdweng

+0

まず第一にあなたの 'case" 7: 'は' while(wishlist!= "7") ' –

答えて

0

あなたの最後の「Console.ReadLine()」は結果を破棄しないので、ウィッシュリストは常に同じ値になります。

しかし、@スティーブが指摘するように、あなたは完全に別のアプローチをとる方がよいでしょう。

一般的なヒントとして、デバッガを使用して、プログラムの実行時に値が何であるかを監視する必要があります。そうすれば、ウィッシュリストは同じ値になります。

0

ダニエルは、上記のあなたは再び

ウィッシュリスト変数を設定するので、代わりの

Console.ReadLine(); 

する必要があると述べたように、whileループの最後で

wishlist = Console.ReadLine(); 

を置きます。

0

あなたが読んだ値にwishlistを設定する必要があります。また、あなたはあなたのswitchの前にいることを実行する必要があります。

namespace GoingShopping 
{ 
    class Program 
    { 
     private static int cabbageamount; 
     private static int tomatoamount; 
     private static int cheeseamount; 
     private static int breadamount; 
     private static int milkamount; 
     private static int onionamount; 
     bool isvalid = true; 

     static void Main(string[] args) 
     { 
      String cabbage = "1"; 
      String tomatos = "2"; 
      String Cheese = "3"; 
      String bread = "4"; 
      String milk = "5"; 
      String onion = "6"; 
      String done = "7"; 
      String menu = "1) Cabbage" + System.Environment.NewLine + 
          "2) Tomatos" + System.Environment.NewLine + 
          "3) Cheese" + System.Environment.NewLine + 
          "4) Bread" + System.Environment.NewLine + 
          "5) Milk" + System.Environment.NewLine + 
          "6) Onion" + System.Environment.NewLine + 
          "7) I'm done shopping"; 

      int total = cabbageamount + tomatoamount + cheeseamount + breadamount + milkamount + onionamount; 

      Console.Write("What you like to purchase ? " + System.Environment.NewLine); 
      Console.WriteLine(menu); 
      string wishlist = "0"; 


      while (wishlist != "7") 
      { 
       wishlist = Console.ReadLine().Trim(); 
       switch (wishlist) 
       { 
        case "1": 
         Console.WriteLine("How many would you like ? "); 
         string cabbageinput = Console.ReadLine(); 
         //int cabbageinput = Convert.ToInt32(Console.ReadLine()); 
         Console.WriteLine(menu); 
         break; 
        case "2": 
         Console.WriteLine("How many would you like ? "); 
         string tomatoinput = Console.ReadLine(); 
         Console.WriteLine(menu); 

         break; 
        case "3": 
         Console.WriteLine("How many would you like ? "); 
         string cheeseinput = Console.ReadLine(); 
         Console.WriteLine(menu); 

         break; 
        case "4": 
         Console.WriteLine("How many would you like ? "); 
         string breadinput = Console.ReadLine(); 
         Console.WriteLine(menu); 

         break; 
        case "5": 
         Console.WriteLine("How many would you like ? "); 
         string milkinput = Console.ReadLine(); 
         Console.WriteLine(menu); 

         break; 
        case "6": 
         Console.WriteLine("How many would you like ? "); 
         string onioninput = Console.ReadLine(); 
         Console.WriteLine(menu); 

         break; 
        case "7": 
         Console.WriteLine("You have chosen to buy : " + System.Environment.NewLine); 
         Console.WriteLine(cabbageamount + "X" + "Cabbages" + System.Environment.NewLine, 
              tomatoamount + "X" + "Tomatos" + System.Environment.NewLine, 
              cheeseamount + "X" + "Cheese" + System.Environment.NewLine, 
              breadamount + "X" + "Bread" + System.Environment.NewLine, 
              milkamount + "X" + "Milk" + System.Environment.NewLine, 
              onionamount + "X" + "Onions" + System.Environment.NewLine); 
         Console.WriteLine("Giving a total of" + total + "items"); 
         break; 
        default:  
         break; 
       } 
      } 

     } 
    } 
} 
0

switch文のためのあなたの全体のロジックが間違っています。 switch文の中にはstringを使用しないでください。私はcharにこれらを変更することができますことをお勧め:

char charcabbage = '1'; // or 0x31 
char tomatos  = '2'; // or 0x32 
char Cheese  = '3'; // or 0x33 
char bread  = '4'; // or 0x34 
char milk  = '5'; // or 0x35 
char onion  = '6'; // or 0x36 
char done  = '7'; // or 0x37 

その後、あなたには、いくつかのInputHandlerは、ユーザー入力を処理して、あなたの「アクション」を返すために行う必要があります。

char ChooseAction(string message) 
{ 
    Console.WriteLine(message); 
    string input = string.Empty; 
    while ((input = Console.ReadLine()) != "exit") 
    { 
     char c = input.Trim()[0]; 
     if (c >= 0x31 && c <= 0x37) 
      return c; 

     Console.WriteLine("Wrong input. Try again..."); 
    } 
    return 0x38;  
} 

は今、この方法は、「出口」のために待っています有効な入力 "1"〜 "7"を入力したい場合は、それを閉じます。

0x31から0x37までの値と同じコードを6回実行しているswitchステートメントの値を入力できるようになりました。ビットでこれを最適化し、

//private static int cabbageamount; 
//private static int tomatoamount; 
//private static int cheeseamount; 
//private static int breadamount; 
//private static int milkamount; 
//private static int onionamount; 

// to this : 
private static System.Collections.Generic.Dictionary<char, int> _items; 

を変更し、ループが始まる前にこれを初期化します。

_items = new System.Collections.Generic.Dictionary<char, int>(); 
for(char i = '0'; i < '7'; i++) { 
    _items.Add(i, 0); 
} 

進むと、あなたの「プレ・ループ」の文をここであなたのようsomehingを行うことができます。

char action = ChooseAction("What you like to purchase ? " + System.Environment.NewLine + menu); 

そして、あなたのwhileループを続けてください:

while (action >= 0x31 && action <= 0x37) 

は、それからちょうどこの形式でswitch文を挿入します。

case '7': 
    { 
     Console.WriteLine("You have chosen to buy : " + System.Environment.NewLine); 
     Console.WriteLine(_items[0x31] + "X" + "Cabbages" + System.Environment.NewLine, 
          _items[0x32] + "X" + "Tomatos" + System.Environment.NewLine, 
          _items[0x33] + "X" + "Cheese" + System.Environment.NewLine, 
          _items[0x34] + "X" + "Bread" + System.Environment.NewLine, 
          _items[0x35] + "X" + "Milk" + System.Environment.NewLine, 
          _items[0x36] + "X" + "Onions" + System.Environment.NewLine); 
        Console.WriteLine("Giving a total of" + total + "items"); 
     // set list to completed: 
     action = 0x38; 
    } 
    break; 

default : 
    { 
     Console.WriteLine("How many would you like ? "); 
     string input = Console.ReadLine(); 
     int temp = 0; 
     if(int.TryParse(input, out temp)) { 
      _items[action] += temp; 
     } 
     action = ChooseAction(menu); 
    } 

今、すべてのあなたの問題は、あなたがそれを行うことを期待して何をすべきか

関連する問題