2015-01-29 5 views
0

저는 현재 학교 과제가 있습니다. 주로 개체 지향 프로그래밍 & 컬렉션을 사용합니다.이전 개체 데이터를 사용하여 연속 개체 생성

나는 그러나 나는 난관에 충돌 한 것, 이것의 대부분이 수행하는 방법을 알고 은 다음 옵니다로 출력하는 List<T> &에서 그들을두고, 10 개체를 만드는, 그래서 내 프로그램을 코딩.

잘 작동하지만 어떤 이유로 인해 (pseudo) 무작위로 있어야하지만 모든 단일 객체는 동일한 정확한 값을 수신합니다. 여기

public class Boom 
{ 
    public static int aantalBomen = 0; 
    public enum boomType { Naald, Loof } 

    public boomType BoomType { get; set; } 
    public int VolgNr { get; set; } 

    private int aantalVogels; 
    public int AantalVogels 
    { 
     get { return aantalVogels; } 
     set 
     { 
      if (value >= 0 && value <= 10) 
       aantalVogels = value; 
     } 
    } 

    public Eekhoorn Eekhoorn { get; set; } 

    private int hoogte; 
    public int Hoogte 
    { 
     get { return hoogte; } 
     set 
     { 
      if (value >= 5 && value <= 10) 
       hoogte = value; 
     } 
    } 

    public bool eekHoorn = false; 

    public Boom() 
    { 
     aantalBomen++; 
     VolgNr = aantalBomen; 
     Random rnd = new Random(); 
     Hoogte = rnd.Next(5, 11); 
     AantalVogels = rnd.Next(0, 11); 
     BoomType = (boomType)Enum.GetValues(typeof(boomType)).GetValue(rnd.Next(0, Enum.GetValues(typeof(boomType)).Length)); 
    } 

    public void MaakEekhoorn() 
    { 
     Eekhoorn = new Eekhoorn(); 
     eekHoorn = true; 
     aantalVogels = (int)Math.Round((double)(aantalVogels/2), 0); 
    } 
} 

&

이 10 개체를 만듭니다 루프입니다 : 여기

그것의 생성자를 포함하는 객체의 클래스 (이름 붐)의 마지막

public List<Boom> Bomen = new List<Boom>(); 
for (int i = 1; i <= 10;i++) 
{ 
    Bomen.Add(new Boom()); 
} 

, I가 사용하고 코드 객체의 생성을 테스트하십시오 :

for (int i = 0;i<10;i++) 
{ 
    lstBomen.Items.Add("VolgNr: " + bos.Bomen[i].VolgNr.ToString() + " AantalVogels: " + bos.Bomen[i].AantalVogels.ToString() + " BoomType: " + 
     bos.Bomen[i].BoomType.ToString() + " Hoogte: " + bos.Bomen[i].Hoogte.ToString()); 
} 

내 코드는 모두 10 개체에 대해 동일한 값을 생성 유지 이유를 다음과 같이 출력의 결과로 파악 :

Output

당신이 코드 또는 프로그램의 실행에 연결 아무것도에 관련된 어떤 더 많은 정보가 필요하면, 기분이 자유롭게 물어보십시오.

+0

새로운 무작위 개체를 만듭니다. 그것은 종자로 시간표를 사용합니다. 이것은 매우 간단하고 빠른 코드이기 때문에 매번 동일한 시드를 얻습니다. 따라서 동일한 시퀀스이므로 동일한 값을 갖습니다. – dbugger

+0

나는 이것을 피하는 방법에 대한 아이디어가 있습니까? 객체가 생성 될 때마다 동일한 값을 얻지 않고 (의미 : 다음 일괄 처리와 동일한 일괄 처리의 값없이) – Yorrick

답변

2

항상 동일한 시드 값을 사용하기 때문에 Random은 항상 동일한 시퀀스를 생성합니다. 당신은 계약자에 i를 통과하고 다음과 같이 변경할 수 있습니다 : 그냥 생성자에 rnd을 통과

Random rnd = new Random(); 
public List<Boom> Bomen = new List<Boom>(); 
for (int i = 1; i <= 10;i++) 
{ 
    Bomen.Add(new Boom(rnd.Next())); 
} 

또는 :

public Boom(int seed) 
{ 
    ... 
    Random rnd = new Random(i); 
    ... 
} 

당신이 당신의 코드를 실행 다른 번호를 각 시간을 얻을 수 있습니다.

+0

객체 생성 루프 'i'의 값을 사용하여 이것을 시도하면 개체를 다시 만들려고 할 때마다 같은 값을 사용하여 다른 나무를 얻는 동시에이를 피할 수있는 방법이 있습니까? – Yorrick

+2

임의의 무작위 객체 하나를 만들어 객체에 전달하면 그 다음에 다른 값이 생성됩니다. – dbugger

+0

@dbugger가 무엇을 의미하는지 알지 못합니다. 생성자 밖에서 임의의 객체를 선언하거나 public Boom (Random rnd) {...}을 통해 생성자에 전달하는 것을 의미합니까? ? – Yorrick