我正在使用c#进行初学者的最终项目,但似乎无法正常使用列表。在“填满”订单后,它也会自动关闭。
class Burgare
{
private string[] hamburger = new string[24];
private int no_burger = 0;
public void add_burger()//Ordering of burgers
{
Console.Clear(); //Clears console to make it look cleaner
while (true)
{
int Burger_option = 0;
do
{
Console.WriteLine("");// The options user can choose from
Console.WriteLine("Please choose burgers from our menu:");
Console.WriteLine("-------Burgers--------");
Console.WriteLine("1 Original One 109");
Console.WriteLine("2 Pig & Cow 109");
Console.WriteLine("3 Spice & Nice 109");
Console.WriteLine("4 Green One 109");
Console.WriteLine("0 Go back to main menu");
Console.WriteLine("----------------------");
Console.WriteLine("");
try //Making sure the user only picks what is on the menu
{
Burger_option = int.Parse(Console.ReadLine());
}
catch
{
Console.WriteLine("You can only choose what is on the menu!");
}
switch (Burger_option) //Depending on the number user presses on keyboard different burgers will be added to order
{
case 1:
Console.WriteLine("You've added the Original One to your order");
Console.WriteLine("If you're done press 0 to go back to the main menu");
hamburger[no_burger] = "Original One";
break;
case 2:
Console.WriteLine("You've added the Pig & Cow to your order");
Console.WriteLine("If you're done press 0 to go back to the main menu");
hamburger[no_burger] = "Pig & Cow";
break;
case 3:
Console.WriteLine("You've added the Spice & Nice to your order");
Console.WriteLine("If you're done press 0 to go back to the main menu");
hamburger[no_burger] = "Spice & Nice";
break;
case 4:
Console.WriteLine("You've added the Green One to your order");
Console.WriteLine("If you're done press 0 to go back to the main menu");
hamburger[no_burger] = "Green One";
break;
case 0: //Sends user back to main menu
Run();
break;
}
no_burger++; //Adds burger
} while (no_burger != 0);
if (no_burger <= 25) //Maximum number of orders
{
Console.WriteLine("The restaurant can't take more than 24 orders of burgers at the time");
Run(); //Sends user back to main menu when the order is over 24
}
}
}
public void print_order()
{
Console.WriteLine("-Your current order-");
foreach (var burger in hamburger) //Showing a list of what is in the order
{
Console.WriteLine(hamburger);
if (burger != null)
Console.WriteLine(burger);
else
Console.WriteLine("Empty space"); //Making empty space to show where you can add more burgers
}
}
输入24个订单后,出现错误“ System.IndexOutOfRangeException:'索引位于数组的边界之外。'”我环顾了一圈,但仍然不太了解如何解决我的代码。告诉用户订单已满后,我希望它返回主菜单。
第二个问题是System.String []问题,当我输入“ print_order”时出现。它显示为 System.String [] 空的空间 System.String [] 空的空间 等等。如果可能的话,我想将其完全删除,或者至少将其替换为1,2,3 ...等。
答案 0 :(得分:4)
首先,请每个问题仅发表一个问题;您在这里描述了许多问题,但实际上只问了一个问题。如果您有多个问题,请发布多个问题。
为什么在调试时我的代码中出现
System.String[]
?
默认情况下,C#在打印出来并打印字符串数组时会给出类型的名称。要将字符串数组转换为字符串,请使用Join
类型的string
方法。注意不要将其与序列上的Join
扩展方法混淆。
“下单”后,它也会自动关闭。
控制台程序的控件到达Main
的末尾时,它将终止该程序。如果您希望发生其他事情,请编写代码以表明您想发生的事情。
输入24个订单后,出现错误“ System.IndexOutOfRangeException:'索引位于数组的边界之外。'”我环顾了一圈,但仍然不太了解如何解决我的代码。告诉用户订单已满后,我希望它返回主菜单。
您已经为24个事物保留了空间,并且您尝试访问第25个事物。这是一个致命的错误。不要那样做您需要检测并防止这种情况。
如果您希望它在告诉用户订单已满后返回主菜单,请编写代码以完成该操作。怎么样?由于主菜单显然是可以多次发生的事情,因此您需要将其放在 loop 中。您已经编写了两个循环。在循环中放更多东西!
在查看您的代码时,还有一些更好的建议:
Console.WriteLine
,然后制作了方法print_order
。 遵循框架设计者设置的模式,而不是您自己创建的模式。类型和方法应为CasedLikeThis
。int.Parse
放在try-catch
中。这就是int.TryParse
的目的!答案 1 :(得分:0)
您实际上从未检查过do...while
循环中添加了多少项-仅在循环完成后才检查。这就是为什么您尝试添加第25个项目时会崩溃的原因。
在do...while
循环中移动处理此问题的逻辑,您将再也不会收到异常。
另外,您的数组只能容纳24个项目,但我想您打算将其设置为25。
此外,由于您不熟悉编程,因此您可能需要查看@Eric Lppert的helpful article on debugging techniques-这样可以节省很多时间。您还应该阅读有关how to use a step debugger的内容以诊断问题。