2017-01-07 7 views
1

Ich arbeite an einem Programm, das eine große Anzahl von Instanzen eines Objekts erstellt, das zu einer Klasse gehört, die ich erstellt habe. Jedes dieser Objekte soll eine Liste von Zufallszahlen enthalten, und ich möchte für jedes Objekt eine andere Zufallsliste haben. Gegenwärtig erstelle ich den Keim für die Zufallszahlen innerhalb der Definition der Klasse (siehe unten), und daher bekomme ich die gleiche Liste in jedem Objekt.Eine Variation von Problemen mit Zufallszahlen in C#

Ich verstehe, wie die Zufallszahlengenerierung funktioniert (und viele andere Antworten über ähnliche Probleme gelesen haben), so dass ich weiß, dass das Problem darin besteht, dass die Samen zu nah an der Zeit erstellt werden. Ich weiß jedoch nicht, wie man einen einzelnen statischen Seed erzeugt, der jedes Mal verwendet wird, wenn ich ein Objekt dieser Klasse verwende. Gibt es eine Möglichkeit, eine statische Zufallszahl als Argument zu verwenden, wenn ich ein neues Objekt instanziiere? Oder gibt es eine bessere Lösung?

Danke.

public class Room 
    { 

     static System.Random x = new System.Random(); 

     public List<int> birthdays = new List<int>(); 

     public int year; 

     public Room(int y) 
     { 

      year = y; 
     } 



     public void Fill(int j) 
     { 
      System.Console.WriteLine(x.Next(1, year)); 
      birthdays.Add(x.Next(1, year)); 
     } 

     public bool Check(int p, int d, int j) 
     { 
      for (int q = 0; q < j; q++) 
      { 
       int total = 0; 
       for (int y = 0; y < j; y++) 
       { 
        if (birthdays[y] - birthdays[q] <= d) { total += 1; }; 

        if (total >= p) 
        { return true; } 
       } 

      } 
      return false; 


     } 

    } 
+1

was macht 'Check'? Nenne Parameter wie diese nicht. 'p',' d', 'j' sind nur verwirrend und nicht selbstbeschreibend. –

Antwort

1

Übergeben Sie es in den Konstruktor des Objekts.

System.Random x; 
    public Room(int y, System.Random rnd) 
    { 
     x= rnd; 
     year = y; 
    } 
+1

Bei Bonuspunkten muss die 'Random' -Instanz in der besitzenden Klasse ein 'static readonly'-Wert sein, damit sie nicht einer neuen Instanz mit einem anderen (oder zurückgesetzten) Startwert zugewiesen werden kann. – Dai

+0

Danke, es funktioniert jetzt. Ich wusste nicht, dass das möglich ist! – ea297