将实例化对象放入数组
Posted
技术标签:
【中文标题】将实例化对象放入数组【英文标题】:Putting instantiated objects in arrays 【发布时间】:2015-01-10 03:26:35 【问题描述】:-
下面是我为我的编程课编写的程序的所有代码。我的主要问题是,当我调用 AddPerson() 时,它会跳过 _people[] 中的位置 [0] 并将创建的对象放置在 _More[] 的 [1] 中。如何在向数组添加新创建的对象的同时防止这种情况发生?
另外,我需要在最后以有序的形式显示数组中的所有数据。我相信我在 GroupOfPeople 类的 DisplayAllPeople() 方法中有正确的代码。
我希望我的大部分内容都是正确的。谁能帮帮我?
*我们的老师为我们(学生)提供了一个名为 IOHelper 的类,但我没有包括它,因为它只是静态方法。
//主程序//
公开课课程 公共静态无效主要(字符串[]参数) GroupOfPeople 组 = 新 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();
//人物类//
公共类人 私有字符串 _name 获取;放; 私人 int _age 得到;放;
public Person(string name, int age)
_name = name;
_age = age;
public void Display()
Console.Write("Name : " + _name);
Console.Write("Age : " + _age);
Console.WriteLine();
//GroupOfPeople 类//
公共类 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();
【问题讨论】:
【参考方案1】:按照您现在的编码方式,每次添加人员时,您都在创建一个新数组,并且只保存最后添加的人员:
Person[] _More= new Person[_people.Length +1];
_More[_people.Length] = newPerson;
_people = _More;
如果您想在每次添加条目时重新调整数组的大小,您应该将已经存在的元素复制到新创建的数组中。
另外,如果您要重新调整数组的大小,更好的方法是预先分配比您需要的更多的空间,并且每次将大小增加一定数量,与数组的当前大小成正比(这可以为数组大小的 1/2、3/4 或其他比例)。这样您就不会在每次添加元素时产生调整大小(复制数组的先前元素)的成本。
或者,如果您的编程任务允许,您也可以使用使用数组后备存储的通用 List<Person>
。
【讨论】:
【参考方案2】:您需要将引用从旧数组复制到新数组:
public void AddPerson(Person newPerson)
Person[] _More= new Person[_people.Length +1];
Array.Copy(_people, _More, _people.Length);
_More[_people.Length] = newPerson;
_people = _More;
【讨论】:
这就像一个魅力!实际上我以前有那个,当我试图让它全部工作时,我不小心把它拿出来忘了放回去。谢谢你的帮助!以上是关于将实例化对象放入数组的主要内容,如果未能解决你的问题,请参考以下文章
在ASP.NET开发网站过程中总会遇到未将对象引用到实例化这样的错误 我是初学者 请问该怎么办