2014-11-13 5 views
0
  1. 아래는 프로그래밍 클래스 작성 프로그램의 코드입니다. 내 주요 문제는 AddPerson()을 호출 할 때 _people []의 위치 [0]을 건너 뛰고 _More []의 [1]에서 만든 개체를 배치한다는 것입니다. 새로 생성 된 객체를 배열에 추가하는 동안 어떻게 이런 일이 일어나지 않도록 할 수 있습니까?
  2. 또한 배열의 모든 데이터를 순서대로 표시해야합니다. GroupOfPeople 클래스의 DisplayAllPeople() 메서드에 적절한 코드가 있다고 생각합니다.

나는 이것이 정확하다고 대부분 기대하고 있습니다. 누구든지 제발 도와 주실 래요?배열에 인스턴스화 된 객체 넣기

* 교사가 우리에게 제공 한 IOHelper라는 클래스가 있지만 정적 메서드이기 때문에 포함하지 않았습니다.

// // 본편

공용 클래스 프로그램 { 공공 정적 무효 메인 (문자열 []에 args) { 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 {얻을; 세트; } 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 클래스 //

공용 클래스 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

이 지금 코딩 한 방법, 당신은 당신이 새로운 배열을 생성하고 마지막에 추가 사람을 저장하는 사람 추가 할 때마다 : 당신이 할 경우

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

을 다시 크기 항목을 추가 할 때마다 배열에서 새로 작성한 배열에 이미 존재하는 요소를 복사해야합니다.

배열 크기를 조정하는 경우 더 나은 방법은 필요한 것보다 더 많은 공간을 미리 할당하고 배열의 현재 크기에 비례하여 크기를 늘릴 때마다 좋습니다 어레이 크기의 1/2, 3/4 또는 일부 다른 프로 포션 일 수 있음). 이 방법을 사용하면 요소를 추가 할 때마다 크기 조정 비용 (배열의 이전 요소 복사)이 발생하지 않습니다.

프로그래밍 할당이 허용하는 경우 어레이 백킹 저장소를 사용하는 일반 을 사용할 수 있습니다.

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; 

} 
+0

이 마법처럼 일했다! 나는 실제로 그것을 거기에서 가지고 있었다. 그리고 내가 모든 일을하려고 노력하고 있었을 때 나는 그것을 실수로 꺼내었고, 그것을 뒤로 넣는 것을 잊었다. 도와 줘서 고맙다 !! – Kyle