菜鸟程序员,有关于 类 和数组的问题

A noob programmer with problems regarding classes and arrays

我正在尝试构建一个名为 Digital Caddie 的简单控制台应用程序。目的是用户最多携带5个包,每个包最多包含14个球杆。

我们创建了一个名为“klubba”的 class。

class Klubba
{        
        public string klubbNamn;
        public int maxLängd; (maxLength)
        public int minLängd; (minLength)    
}

还有一个叫做“包”的class

class Bag
{
    public string namn;
    public Klubba[] klubba;
}

我们遇到的问题是,当我们尝试为每个变量添加一个值时,我们收到一条消息:“System.NullReferenceException: 'Object reference not set to an instance of an object.' 我在你下面 'null'”可以找到我们的其余代码。当我们到达方法“LäggTillBag”时出现问题。

namespace Digital_Caddie
{
    class Program
    {
        static Bag[] bagRegister = new Bag[0];
        static void Main(string[] args)
        {
            Huvudmeny();
            SkrivUtBaglista(bagRegister);

        }
        static void Huvudmeny()
        {

            while (true)
            {
                Console.WriteLine("\nVälkommen till Huvudmenyn, väl ett av nedan alternativ! \n Kom ihåg att skapa din bag innan du kan börja spela:)");
                Console.WriteLine("1. Spela Golf");
                Console.WriteLine("2. Skapa ny bag");
                Console.WriteLine("3. Mina bags");
                Console.WriteLine("4. Avsluta programmet");

                string användarInput = Console.ReadLine();

                if (användarInput == "1")
                {
                    Console.WriteLine("Dags att spela golf! \n Välj din bag för att komma igång.");

                }
                else if (användarInput == "2")
                {
                    Console.WriteLine("Dags att skapa ny bag, kör hårt!");
                    LäggTillBag();


                }
                else if (användarInput == "3")
                {
                    Console.WriteLine("Mina bags");

                }
                else if (användarInput == "4")
                {
                    Console.WriteLine("Du har nu avslutat programmet, välkommen åter!");
                    break;
                }
                else
                {
                    Console.WriteLine("Ogiltligt val, välj mellan 1-4!");
                }
            }
        }

        public static void LäggTillBag() //Prompta användaren till att skapa en ny bag med klubbor.
        {
            Bag ny = new Bag();
            ny.klubba = new Klubba[14];
            
            Console.WriteLine("Döp din bag: ");
            ny.namn = Console.ReadLine();
            uint antalKlubbor = ReadUInt("Hur många klubbor vill du lägga till i bagen?: ");

            for (int i = 0; i < antalKlubbor; i++)
            {
                //Får felmeddelande när attribut för klubbans namn,max och min längd ska lägga in i arrayn. Den vill inte köpa attributen.
                Console.WriteLine("#" + (i + 1) + "Namnge ny klubba: \n");
                ny.klubba[i].klubbNamn = Console.ReadLine();

                
                Console.WriteLine("#" + (i + 1) + "Ange max längd som du slår med klubban: \n"); 
                ny.klubba[i].maxLängd = int.Parse(Console.ReadLine());



                Console.WriteLine("#" + (i + 1) + "Ange minimum längd som du slår med klubban: \n");
                ny.klubba[i].minLängd = int.Parse(Console.ReadLine());


            }
            bagRegister = UtökaBagRegister(bagRegister, ny); //Lägger till bag sist i bagregister.
            
        }
        public static Bag[] UtökaBagRegister(Bag[] lista, Bag ny)
        {
            Bag[] nyLista = new Bag[lista.Length + 1];
            for (int i = 0; i < lista.Length; i++)
                nyLista[i] = lista[i];
            nyLista[lista.Length] = ny;
            return nyLista;

        }
        public static uint ReadUInt(string label)
        {
            Console.WriteLine(label);
            uint tal;
            while (!uint.TryParse(Console.ReadLine(), out tal))
            {
                Console.WriteLine("Måste vara ett possitivt tal! ");
                Console.WriteLine(label);
            }

            return tal;
        }

        public static void SkrivUtBaglista(Bag[] bagRegister)
        {
            Console.WriteLine("Utskrift av bagregister: \n");
            for (int i = 0; i < bagRegister.Length; i++) //loopa igenom bagregistret
            {
                Console.WriteLine(bagRegister.Length);
                Console.WriteLine("\n#" + i + "Bagnamn: " + bagRegister[i].namn);
                Console.WriteLine("Klubbor i baggen: " + bagRegister[i].klubba);

                /*for (int k = 0; k < bagRegister.Length; k++)
                {
                    Console.WriteLine("Klubba: " + bagRegister[i].klubbNamn + "denna klubbar går mellan " + bagRegister[i].minLängd + "-" + bagRegister[i].maxLängd + " m");
                }*/
                
                /*foreach (string klubba in bagRegister[i].klubbNamn)
                {
                    
                    Console.Write(klubba + "\t\t");
                }
                Console.Write("\nmin:");
                foreach (int minLängd in bagRegister[i].minLängd)
                {
                    Console.Write(minLängd + "\t\t");
                }
                Console.Write("\nmax:{0,3} ");
                foreach (int maxLängd in bagRegister[i].maxLängd)
                {
                    Console.Write(maxLängd + "\t\t");
                }*/
            }
        }

    }
    
}

初始化数组不足以访问它的项 - 您必须先创建对象。

  1. ny.klubba = new Klubba[14]; //[null,null,null,null,null...]

  2. ny.klubba[i] = new Klubba(); // this is missing

  3. ny.klubba[i].klubbNamn = Console.ReadLine();