我希望我的大部分内容都是正确的。有人可以帮帮我吗?
*有一个名为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();
}
}
}
答案 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;
}