2017-05-15 5 views
0

Mein zufälligen Teil Code fallen ist:C# - Auswahl Zufallsgenerator für die Liste mit einer Wahrscheinlichkeit von 1 Element einige Male am Anfang

 public Gun GetRandomGun(IEnumerable<Gun> sequence, Random random) 
     { 
      int totalWeight = sequence.Sum(p => p.Probability); 
      int weightedPick = random.Next(totalWeight); 
      foreach (var item in sequence) 
      { 
       if (weightedPick < item.Probability) 
       { 
        return item; 
       } 
       weightedPick -= item.Probability; 
      } 
      throw new InvalidOperationException("List must have changed..."); 

So versuche ich zufällig Pistole mit Wahrscheinlichkeit zu erhalten, wie Sie sehen können. Also, wenn ich das Programm am Anfang öffne, wenn ich den Befehl einige Male rufe, bekomme ich die gleiche Waffe und danach gibt mir das Programm zufällige Waffen und manchmal sogar die gleiche Pistole x 2 Wie kann ich es beheben ? Meine XML config:

<Gun> 
     <GunID>116</GunID> 
     <Probability>18</Probability> 
    </Gun> 
    <Gun> 
     <GunID>519</GunID> 
     <Probability>5</Probability> 
    </Gun> 
    <Gun> 
     <GunID>363</GunID> 
     <Probability>25</Probability> 
    </Gun> 
    <Gun> 
     <GunID>126</GunID> 
     <Probability>10</Probability> 
    </Gun> 
    <Gun> 
     <GunID>112</GunID> 
     <Probability>15</Probability> 
    </Gun> 
    <Gun> 
     <GunID>297</GunID> 
     <Probability>5</Probability> 
    </Gun> 
    <Gun> 
     <GunID>300</GunID> 
     <Probability>5</Probability> 
    </Gun> 
    <Gun> 
     <GunID>1041</GunID> 
     <Probability>25</Probability> 
    </Gun> 
    <Gun> 
     <GunID>1037</GunID> 
     <Probability>25</Probability> 
    </Gun> 

So zum Beispiel, wenn ich das Programm am Start und rufen Sie den Befehl paar Mal bin ich immer nur id 1041 zum Beispiel und nach ein paar Mal beginne ich zufällig Waffen zu erhalten und Manchmal, wenn ich den Befehl zweimal rufe, bekomme ich die gleiche Waffe, aber das ist weniger wichtig. Bitte helfen Sie mir, den Fehler zu beheben, Danke!

+0

Wie rufen Sie diese Funktion auf? Können Sie zeigen, wo 'Random' initialisiert wird? – degant

Antwort

0

Speichern zuletzt abgerufenen Waffe ID dann beim Abrufen neuer Waffe überprüfen Sie ihre ID mit der zuletzt gespeicherten Waffe ID, wenn sie übereinstimmte die Methode neu aufrufen.

Verwenden Sie die rekursive Funktion.

Verwandte Themen