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.

31voto

Michael Myers Punkte 183216
 rand.nextInt((max+1) - min) + min;

29voto

gifpif Punkte 4247

Erzeugen Sie eine Zufallszahl für die Differenz von min und max mit Hilfe der nextint(n) Methode und addieren Sie dann die Zahl min zu dem Ergebnis:

Random rn = new Random();
int result = rn.nextInt(max - min + 1) + min;
System.out.println(result);

0 Stimmen

Was ist der Unterschied zu früheren Antworten?

21voto

Lawakush Kurmi Punkte 2246

Um eine Zufallszahl "zwischen zwei Zahlen" zu erzeugen, verwenden Sie den folgenden Code:

Random r = new Random();
int lowerBound = 1;
int upperBound = 11;
int result = r.nextInt(upperBound-lowerBound) + lowerBound;

Damit erhalten Sie eine Zufallszahl zwischen 1 (einschließlich) und 11 (ausschließlich), also initialisieren Sie den upperBound-Wert durch Addition von 1. Wenn Sie z. B. eine Zufallszahl zwischen 1 und 10 erzeugen möchten, initialisieren Sie die upperBound-Zahl mit 11 anstelle von 10.

21voto

Prof Mo Punkte 475

Verwenden Sie einfach die Zufällig Klasse:

Random ran = new Random();
// Assumes max and min are non-negative.
int randomInt = min + ran.nextInt(max - min + 1);

10 Stimmen

Ich sehe hier nichts Neues, was nicht schon in zahllosen früheren Beiträgen gepostet worden wäre.

0 Stimmen

@MaartenBodewes Diese unzähligen Beiträge sind schwer zu finden. Einige andere Methoden oben

1 Stimmen

Ja, eine weitere Fälschung wird dagegen nicht helfen. Stimmt für die anderen Antworten oder fügt Details hinzu. Ansonsten ist es einfach nur Rep Farming.

21voto

Luke Taylor Punkte 9203

Diese Methode könnte sich als praktisch erweisen:

Diese Methode gibt eine Zufallszahl zurück zwischen den angegebenen Mindest- und Höchstwert:

public static int getRandomNumberBetween(int min, int max) {
    Random foo = new Random();
    int randomNumber = foo.nextInt(max - min) + min;
    if (randomNumber == min) {
        // Since the random number is between the min and max values, simply add 1
        return min + 1;
    } else {
        return randomNumber;
    }
}

und diese Methode wird eine Zufallszahl zurückgeben von den angegebenen Minimal- und Maximalwert (die erzeugte Zahl könnte also auch die Minimal- oder Maximalzahl sein):

public static int getRandomNumberFrom(int min, int max) {
    Random foo = new Random();
    int randomNumber = foo.nextInt((max + 1) - min) + min;

    return randomNumber;
}

0 Stimmen

// Since the random number is between the min and max values, simply add 1 . Warum? Zählt min nicht? Normalerweise ist der Bereich [min, max), wobei min eingeschlossen und max ausgeschlossen ist. Falsche Antwort, abgewählt.

0 Stimmen

@MaartenBodewes +1 wird hinzugefügt, weil getRandomNumberBetween eine Zufallszahl ausschließlich der angegebenen Endpunkte erzeugt.

2 Stimmen

Die Zahl min + 1 ist doppelt so wahrscheinlich wie die andere Zahl das Ergebnis von getRandomNumberBetween !

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