2017-02-04 12 views
0

每當我運行該程序並選擇7時,它會問您想要多少個真正令人困惑的問題,我也不確定是否要正確添加總項目。任何幫助將不勝感激。C#使用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 = 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

Try:string wishlist = Console.ReadLine()。Trim(); – jdweng

+0

首先你的'case'7「:'不會因爲'while(wishlist!=」7「)而命中' –

回答

0

你再也沒有設置願望清單,你上次的「Console.ReadLine()」拋棄了結果,所以wishlist總是相同的值。

但是,正如@Steve指出的那樣,您最好採用完全不同的方法。

作爲一般性提示,您應該使用調試器「觀察」程序執行時的值 - 然後您會注意到願望清單是相同的值。

0

正如丹尼爾上面所說的,你需要設置的心願變量再次

所以不是

Console.ReadLine(); 

wishlist = Console.ReadLine(); 

在while循環的結束。

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」。

正如您現在所看到的,用戶可以輸入0x310x37之間的值以及您的switch聲明中,您將運行相同的代碼6次,所以...在一個位優化這一點,並改變

//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); 
    } 

現在你所有的問題已經不復存在了:)