Willekeurige getallen genereren in Java

Het genereren van een reeks willekeurige nummers is een van die veel voorkomende taken die van tijd tot tijd opduiken. In Java, het kan eenvoudig worden bereikt door de java.util te gebruiken. Willekeurige klasse.

De eerste stap, zoals bij het gebruik van elke API klasse, is om de import statement voor het begin van je programmaklasse te plaatsen:

Maak vervolgens een willekeurig object:

Het Random-object biedt u een eenvoudige generator voor willekeurige getallen. De methoden van het object geven de mogelijkheid om willekeurige getallen te kiezen. De methoden nextInt () en nextLong () retourneren bijvoorbeeld een getal dat binnen het bereik van waarden (negatief en positief) van respectievelijk de gegevenstypen int en long valt:

De geretourneerde nummers zijn willekeurig gekozen int- en lange waarden:

Willekeurige nummers uit een bepaald bereik kiezen

Normaal gesproken moeten de te genereren willekeurige getallen uit een bepaald bereik komen (bijvoorbeeld tussen 1 en 40 inclusief). Voor dit doel kan de methode nextInt () ook een int-parameter accepteren. Het geeft de bovengrens voor het nummerbereik aan. Het nummer van de bovengrens is echter niet opgenomen als een van de nummers die kunnen worden gekozen. Dat klinkt misschien verwarrend, maar de methode nextInt () werkt vanaf nul. Bijvoorbeeld:

instagram viewer

kiest alleen een willekeurig getal van 0 tot en met 39. Om te kiezen uit een bereik dat begint met 1, voegt u eenvoudig 1 toe aan het resultaat van de methode nextInt (). Als u bijvoorbeeld een getal tussen 1 en 40 wilt kiezen, voegt u er één toe aan het resultaat:

Als het bereik begint met een hoger nummer dan één, moet u:

  • minus het startnummer van het bovenste limietnummer en voeg er dan een toe.
  • voeg het startnummer toe aan het resultaat van de methode nextInt ().

Als u bijvoorbeeld een nummer van 5 tot en met 35 wilt kiezen, is het bovenste limietnummer 35-5 + 1 = 31 en moet 5 aan het resultaat worden toegevoegd:

Hoe willekeurig is de willekeurige klasse?

Ik wijs erop dat de Random-klasse op een deterministische manier willekeurige getallen genereert. Het algoritme dat de willekeur produceert, is gebaseerd op een getal dat een seed wordt genoemd. Als het zaadnummer bekend is, is het mogelijk om de cijfers te achterhalen die uit het algoritme zullen worden geproduceerd. Om dit te bewijzen gebruik ik de cijfers vanaf de datum dat Neil Armstrong stapte voor het eerst op de maan als mijn zaadnummer (20 juli 1969):

Het maakt niet uit wie deze code uitvoert, de volgorde van "willekeurige" getallen is:

Standaard het zaadnummer dat wordt gebruikt door:

is de huidige tijd in milliseconden sinds 1 januari 1970. Normaal gesproken levert dit voor de meeste doeleinden voldoende willekeurige getallen op. Houd er echter rekening mee dat twee generatoren voor willekeurige getallen die binnen dezelfde milliseconde zijn gemaakt, dezelfde willekeurige getallen zullen genereren.

Wees ook voorzichtig bij het gebruik van de klasse Random voor elke toepassing die een veilige generator voor willekeurige getallen moet hebben (bijvoorbeeld een gokprogramma). Het is misschien mogelijk om het seed-nummer te raden op basis van de tijd dat de toepassing wordt uitgevoerd. Over het algemeen is het voor toepassingen waarbij de willekeurige getallen absoluut kritiek zijn, het beste om een ​​alternatief voor het willekeurige object te vinden. Voor de meeste toepassingen waar er slechts een bepaald willekeurig element moet zijn (bijv. Dobbelstenen voor een bordspel), werkt het prima.

instagram story viewer