[英]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”。
正如您现在所看到的,用户可以输入从0x31
到0x37
值,并且在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.