4099 Stimmen

Wie erzeuge ich in Java zufällige Ganzzahlen innerhalb eines bestimmten Bereichs?

Wie generiere ich eine zufällige int Wert in einem bestimmten Bereich?

Ich habe Folgendes versucht, aber das funktioniert nicht:

Versuch 1:

randomNum = minimum + (int)(Math.random() * maximum);

Fehler: randomNum kann größer sein als maximum .

Versuch 2:

Random rn = new Random();
int n = maximum - minimum + 1;
int i = rn.nextInt() % n;
randomNum =  minimum + i;

Fehler: randomNum kann kleiner sein als minimum .

0 Stimmen

Wenn Sie viele Zufallszahlen benötigen, empfehle ich die Klasse Random in der API nicht. Sie hat einfach eine zu kleine Periode. Versuchen Sie die Mersenne-Twister stattdessen. Es gibt eine Java-Implementierung .

46 Stimmen

Bevor Sie eine neue Antwort schreiben, bedenken Sie, dass es bereits mehr als 65 Antworten auf diese Frage gibt. Bitte stellen Sie sicher, dass Ihre Antwort Informationen enthält, die nicht in den vorhandenen Antworten enthalten sind.

123voto

Bill the Lizard Punkte 384619

Sie können Ihr zweites Codebeispiel so bearbeiten:

Random rn = new Random();
int range = maximum - minimum + 1;
int randomNum =  rn.nextInt(range) + minimum;

110voto

hexabunny Punkte 1375

Eine kleine Änderung Ihrer ersten Lösung würde ausreichen.

Random rand = new Random();
randomNum = minimum + rand.nextInt((maximum - minimum) + 1);

Sehen Sie hier mehr zur Umsetzung von Random

0 Stimmen

Für Minimum <= Wert < Maximum habe ich das Gleiche mit Math : randomNum = minimum + (int)(Math.random() * (maximum-minimum)); aber die Besetzung ist nicht wirklich schön anzusehen ;)

1 Stimmen

Mindestens 7 Jahre verspätete doppelte Antwort.

0 Stimmen

Das war für mich als Anfängerin am einfachsten umzusetzen. Danke!

101voto

andrew Punkte 2907

ThreadLocalRandom Äquivalent der Klasse java.util.Random für Multithreading-Umgebungen. Die Generierung einer Zufallszahl wird lokal in jedem der Threads durchgeführt. So haben wir eine bessere Leistung durch die Verringerung der Konflikte.

int rand = ThreadLocalRandom.current().nextInt(x,y);

x , y - Intervalle z.B. (1,10)

78voto

Matt R Punkte 2467

El Math.Random Klasse in Java ist 0-basiert. Wenn Sie also etwas wie dieses schreiben:

Random rand = new Random();
int x = rand.nextInt(10);

x liegt zwischen 0-9 inklusive.

Bei der folgenden Anordnung von 25 Elemente, der Code zur Erzeugung einer Zufallszahl zwischen 0 (die Basis des Arrays) und array.length wäre:

String[] i = new String[25];
Random rand = new Random();
int index = 0;

index = rand.nextInt( i.length );

Seit i.length wird zurückgegeben 25 die nextInt( i.length ) gibt eine Zahl zwischen dem Bereich von 0-24 . Die andere Option ist die Verwendung von Math.Random die auf die gleiche Weise funktioniert.

index = (int) Math.floor(Math.random() * i.length);

Für ein besseres Verständnis lesen Sie bitte den Forumsbeitrag Zufällige Intervalle (archive.org) .

0 Stimmen

Es ist mir ein Rätsel, warum Sie den Index auf 0 setzen.

0 Stimmen

@CodeConfident Die index Variable hat keinen Einfluss auf das Ergebnis der Zufallszahl. Sie können die Variable auf jede beliebige Weise initialisieren, ohne sich Gedanken über eine Änderung des Ergebnisses machen zu müssen. Ich hoffe, das hilft.

0 Stimmen

Genau ... es ist völlig ungenutzt. Ich würde ihn direkt mit dem Rand initialisieren: int index = rand.nextInt(i.Length);

64voto

Abel Callejo Punkte 11541

Dies kann durch eine einfache Anweisung geschehen:

Randomizer.generate(0,10); //min of zero, max of ten

Nachfolgend der Quellcode

Randomizer.java

public class Randomizer {
    public static int generate(int min,int max) {
        return min + (int)(Math.random() * ((max - min) + 1));
    }
}

Es ist einfach sauber und einfach.

7 Stimmen

Dies hätte eine Bearbeitung des anderen Beispiels sein können, jetzt ist es einfach eine unverhohlene Kopie, um den Ruf zu verbessern. Der Hinweis auf die "Antwort mit den meisten Stimmen" ist auch nicht sehr direkt, er kann sich ändern.

2 Stimmen

Das ist richtig @MaartenBodewes. Als ich diese Antwort schrieb, die Antwort mit den meisten Stimmen oben wurde noch als algorithmusähnliche Lösung geschrieben. Nun hat sich die obige Lösung stark verändert und diese Antwort sah nun wie ein Nachahmer aus.

2 Stimmen

Ich verstehe wirklich nicht, warum solche grundlegenden Teile des Codes nicht Teil der Java-Standardbibliotheken sind. Warum muss ich das implementieren?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X