为什么在调试时在代码中得到System.String []?

时间:2019-05-30 16:14:57

标签: c#

我正在使用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 ...等。

2 个答案:

答案 0 :(得分:4)

首先,请每个问题仅发表一个问题;您在这里描述了许多问题,但实际上只问了一个问题。如果您有多个问题,请发布多个问题。

  

为什么在调试时我的代码中出现System.String[]

默认情况下,C#在打印出来并打印字符串数组时会给出类型的名称。要将字符串数组转换为字符串,请使用Join类型的string方法。注意不要将其与序列上的Join扩展方法混淆。

  

“下单”后,它也会自动关闭。

控制台程序的控件到达Main的末尾时,它将终止该程序。如果您希望发生其他事情,请编写代码以表明您想发生的事情。

  

输入24个订单后,出现错误“ System.IndexOutOfRangeException:'索引位于数组的边界之外。'”我环顾了一圈,但仍然不太了解如何解决我的代码。告诉用户订单已满后,我希望它返回主菜单。

您已经为24个事物保留了空间,并且您尝试访问第25个事物。这是一个致命的错误。不要那样做您需要检测并防止这种情况。

如果您希望它在告诉用户订单已满后返回主菜单,请编写代码以完成该操作。怎么样?由于主菜单显然是可以多次发生的事情,因此您需要将其放在 loop 中。您已经编写了两个循环。在循环中放更多东西!

在查看您的代码时,还有一些更好的建议:

  • 现在开始使用C#语言的约定。您编写了Console.WriteLine,然后制作了方法print_order遵循框架设计者设置的模式,而不是您自己创建的模式。类型和方法应为CasedLikeThis
  • 永远不要将int.Parse放在try-catch中。这就是int.TryParse的目的!
  • 您的程序存在错误;如果有人输入7,会怎样?处理那个案件!

答案 1 :(得分:0)

您实际上从未检查过do...while循环中添加了多少项-仅在循环完成后才检查。这就是为什么您尝试添加第25个项目时会崩溃的原因。

do...while循环中移动处理此问题的逻辑,您将再也不会收到异常。

另外,您的数组只能容纳24个项目,但我想您打算将其设置为25。

此外,由于您不熟悉编程,因此您可能需要查看@Eric Lppert的helpful article on debugging techniques-这样可以节省很多时间。您还应该阅读有关how to use a step debugger的内容以诊断问题。