【问题标题】:Putting instantiated objects in arrays将实例化对象放入数组
【发布时间】:2015-01-10 03:26:35
【问题描述】:
  1. 下面是我为我的编程课编写的程序的所有代码。我的主要问题是,当我调用 AddPerson() 时,它会跳过 _people[] 中的位置 [0] 并将创建的对象放置在 _More[] 的 [1] 中。如何在向数组添加新创建的对象的同时防止这种情况发生?
  2. 另外,我需要在最后以有序的形式显示数组中的所有数据。我相信我在 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();
        }

    }
}

【问题讨论】:

    标签: c# arrays methods


    【解决方案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;
      
      }
      

      【讨论】:

      • 这就像一个魅力!实际上我以前有那个,当我试图让它全部工作时,我不小心把它拿出来忘了放回去。谢谢你的帮助!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-28
      • 1970-01-01
      相关资源
      最近更新 更多