将实例化对象放入数组中

时间:2014-11-13 04:09:32

标签: c# arrays methods

  1. 以下是我为编程课程编写的程序的所有代码。我的主要问题是,当我调用AddPerson()时,它会跳过_people []中的位置[0]并将创建的对象放在_More []的[1]中。如何在将新创建的对象添加到阵列的同时防止这种情况发生?
  2. 另外,我需要在最后以有序的形式显示数组中的所有数据。我相信我在GroupOfPeople类的DisplayAllPeople()方法中有正确的代码。
  3. 我希望我的大部分内容都是正确的。有人可以帮帮我吗?

    *有一个名为IOHelper的课程由我们的老师提供给我们(学生),但我没有包含它,因为它只是静态方法。

    //主程序//

    公共课程     {         public static void Main(string [] args)         {             GroupOfPeople group = new GroupOfPeople();

            while (IOHelper.AskYesNoQuestion("Do you want to add another person to the array? "))
            {
                Console.Write("Name?   :");
                string name = Console.ReadLine();
                Console.Write("Age?    :");
                int age = int.Parse(Console.ReadLine());
                Person newPerson = new Person(name, age);
    
                group.AddPerson(newPerson);
    
            }
    
            Console.WriteLine("Here are your entries:");
    
            group.DisplayAllPeople();
    
            Console.Write("Press any key to end the program... ");
            Console.ReadKey();
        }
    
     }
    

    // Person Class //

    公共类人员     {         private string _name {get;组; }         private int _age {get;组; }

        public Person(string name, int age)
        {
            _name = name;
            _age = age;
        }
    
    
        public void Display()
        {
            Console.Write("Name : " + _name);
            Console.Write("Age  : " + _age);
            Console.WriteLine();
        }
    }
    

    // GroupOfPeople Class //

    公共类GroupOfPeople     {         私人[] _people;

        public GroupOfPeople()
        {
            _people = new Person[0];
        }
    
        public void AddPerson(Person newPerson)
        {
    
            Person[] _More= new Person[_people.Length +1];
            _More[_people.Length] = newPerson;
            _people = _More;
    
        }
    
    
    
        public void DisplayAllPeople()
        {
            foreach (Person newPerson in _people)
            {
                newPerson.Display();
            }
    
        }
    }
    

2 个答案:

答案 0 :(得分:0)

现在你有这个编码的方式,每次你添加一个人,你正在创建一个新阵列,只保存最后添加的人:

   Person[] _More= new Person[_people.Length +1];
   _More[_people.Length] = newPerson;
   _people = _More;

如果要在每次向其中添加条目时重新调整数组大小,则应将现有元素复制到新创建的数组中。

另外,如果你正在重新调整阵列的大小,一个更好的方法是预先分配比你需要的更多空间,每次增加一定量,与阵列的当前大小成比例(这可能是阵列大小的1/2,3/4,或其他一些proprotion)。这样,每次添加元素时,都不会产生调整大小(复制数组的先前元素)的成本。

或者您可以使用使用数组后备存储的通用List<Person>,如果您的编程指派允许的话。

答案 1 :(得分:0)

您需要将引用从旧数组复制到新数组:

public void AddPerson(Person newPerson)
{
    Person[] _More= new Person[_people.Length +1];
    Array.Copy(_people, _More, _people.Length);
    _More[_people.Length] = newPerson;
    _people = _More;

}