Hoe kan ik een willekeurig getal genereren dat een van de sets is [0,5,10,15]?

Ik heb het volgende gebruikt:

Random r = new Random(); 
var a = r.Next(9)

Om een ​​willekeurig getal tussen 0-9 te genereren.

Nu moet ik echter willekeurig een van de volgende nummers genereren: 0,5,10,15

Is er een manier om dit te wijzigen om de bovenstaande nummers te selecteren?

0

7 antwoord

Random r = new Random(); 
var a = r.Next(4) * 5;

Zal het lukken. Merk op dat het argument een exclusieve bovengrens is, zodat het nooit zal worden gegenereerd. Uw codevoorbeeld genereert tussen 0 en 8.

Als u een andere reeks nummers nodig heeft, kunt u het volgende doen:

int[] possible = new int[] { 0, 5, 10, 15 };
Random r = new Random(); 
int a = possible[r.Next(possible.length)];
6
toegevoegd
Het downvote kan van iemand zijn die de belichting op zijn eigen antwoord wil vergroten
toegevoegd de auteur dreamlax, de bron
Het klinkt als het werk van Richard Pompous III.
toegevoegd de auteur Jim Balter, de bron
Dat zou ook mijn gok zijn, gezien het enorme aantal van hen. Jammer dat iemand dat zou doen.
toegevoegd de auteur Mike Precup, de bron
Aaaand ik ben ook in de stemming. Uitleg? Drie berichten hier zijn downmeld zonder reden.
toegevoegd de auteur Mike Precup, de bron
Random rnd = new Random();

//create a pre-defined list
int[] nums = new int[] {0, 5, 10, 15};

int rndNum = nums[rnd.Next(nums.Length)];

U kunt zelfs de lus herhalen om meer dan één willekeurig getal uit de reeks vooraf gedefinieerde getallen in een array te genereren.

4
toegevoegd
@downvoter - uitleg?
toegevoegd de auteur PaRiMaL RaJ, de bron
@MikePrecup - goed syntaxis opgelost!
toegevoegd de auteur PaRiMaL RaJ, de bron
Ik ben niet de downvoter, maar ik heb het eerder gehad vanwege syntaxisfouten. Je hebt er verschillende in, dus dat is mogelijk. EDIT: TGH werd ook geraakt, dus ik denk het niet. Dit is een vreemde post. EDIT2: En ik ook. Wat is deze waanzin?
toegevoegd de auteur Mike Precup, de bron
Merk op dat het argument van Volgende een exclusieve bovengrens is.
toegevoegd de auteur Mike Precup, de bron

Genereer een willekeurig getal tussen 0 en 3 en gebruik dat eenvoudig als een index in een array:

Iets dergelijks (pseudocode):

var nums = [0, 5, 10, 15];
return nums[new Random().Next(4)];

Of als het echt zo simpel is als een veelvoud van 5; eenvoudig vermenigvuldigen:

return new Random().Next(4) * 5;
1
toegevoegd
Volgende (3) levert alleen 0, 1 of 2 op
toegevoegd de auteur Jim Balter, de bron

Ja. Zet de vier nummers in een array van vier elementen. Genereer vervolgens willekeurige getallen tussen 0-3 en gebruik die om de array te indexeren

1
toegevoegd
@TGH - ik heb geen enkele van u neergehaald!
toegevoegd de auteur PaRiMaL RaJ, de bron
Dit is in essentie hetzelfde als de oplossing van @ AppDeveloper. Alleen de code ontbreekt.
toegevoegd de auteur dotNET, de bron
waarom de neerwaartse stemming?
toegevoegd de auteur TGH, de bron
const int iterator = 5;
const int upperBound = 15;

var possibleValues = (from n in Enumerable.Range(0, upperBound + 1)
                      where n % iterator == 0
                      select n).ToArray(); 

Random r = new Random();
var a = possibleValues[r.Next(possibleValues.Length)];
0
toegevoegd
Bestaat er een LINQ-oplossing zonder de% -stap?
toegevoegd de auteur syclee, de bron
Ik heb de linq-oplossing gevonden. Ik wist niet van de reeks, leuk
toegevoegd de auteur syclee, de bron
Hoe ziet de linq-oplossing eruit?
toegevoegd de auteur syclee, de bron
ja je hebt gelijk. Wat dacht ik, haha
toegevoegd de auteur syclee, de bron
Voeg een komma toe tussen 10 en 15.
toegevoegd de auteur dotNET, de bron
if (i% iterator == 0) - het zou beter (sneller) zijn om i te verhogen met iterator . Of, voor elegantie, zou u dit waarschijnlijk op één lijn met Linq kunnen doen.
toegevoegd de auteur Jim Balter, de bron
Te duur..
toegevoegd de auteur AgentFire, de bron
public static IEnumerable Range(int count, int start = 0, int step = 1)
{
    for (int i = start; i < count; i++)
        yield return i;
}

var arr = Range(4, 0, 5).ToArray();//0, 5, 10, 15.
0
toegevoegd
  Random r = new Random();
  var a = r.Next(4)*5;
0
toegevoegd