繁体   English   中英

C#使用Switch语句制作购物清单

[英]C# Make a grocery list with a Switch Statement

每当我运行该程序并选择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();
            }

        }
    }
}

您再也不需要设置心愿单了,最后一个“ Console.ReadLine()”会丢弃结果,因此心愿单始终是相同的值。

但是,正如@Steve指出的那样,最好还是完全采用其他方法。

作为一般提示,您应该使用调试器“观察”程序执行时的值-然后您会发现心愿单是相同的值。

正如上面的丹尼尔所说,您需要再次设置心愿单变量

所以代替

Console.ReadLine();

wishlist = Console.ReadLine();

在while循环结束时。

您需要将wishlist设置为已读取的值。 另外,您需要在switch之前执行此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;
                }
            }

        }
    }
}

您对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);
}

现在进入“循环前”语句,您可以执行以下操作:

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

现在,您所有的问题都将消失:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM