4124 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 .

47 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.

20voto

user2427 Punkte 7680
int random = minimum + Double.valueOf(Math.random()*(maximum-minimum )).intValue();

Oder werfen Sie einen Blick auf RandomUtils von Apache Commons .

0 Stimmen

Das ist nützlich, aber es gibt einen kleinen Fehler: Die Methodensignaturen lauten: nextDouble(double startInclusive, double endInclusive), aber wenn man in die Methoden hineinschaut, sollte endInclusive eigentlich endExclusive sein.

0 Stimmen

Double.valueOf(Math.random()*(maximum-minimun)).intValue() ist eine ziemlich verworrene (und ineffiziente) Art zu sagen (int)(Math.random()*(maximum-minimun))

1 Stimmen

Rechtschreibfehler bei minimum return minimum + Double.valueOf(Math.random() * (maximum - minimum)).intValue();

20voto

sam Punkte 199

Im Falle eines Würfels wäre es eine Zufallszahl zwischen 1 und 6 (nicht 0 bis 6), also:

face = 1 + randomNumbers.nextInt(6);

19voto

In Java 8 können Sie das in aller Kürze erreichen:

Random random = new Random();

int max = 10;
int min = 5;
int totalNumber = 10;

IntStream stream = random.ints(totalNumber, min, max);
stream.forEach(System.out::println);

18voto

gerardw Punkte 5059

Eine andere Möglichkeit ist die Verwendung von Apache Commons :

import org.apache.commons.math.random.RandomData;
import org.apache.commons.math.random.RandomDataImpl;

public void method() {
    RandomData randomData = new RandomDataImpl();
    int number = randomData.nextInt(5, 10);
    // ...
 }

18voto

Garrett Hall Punkte 28608

Hier ist eine hilfreiche Klasse zur Erzeugung von Zufallszahlen ints in einem Bereich mit einer beliebigen Kombination von einschließenden/ausschließenden Grenzen:

import java.util.Random;

public class RandomRange extends Random {
    public int nextIncInc(int min, int max) {
        return nextInt(max - min + 1) + min;
    }

    public int nextExcInc(int min, int max) {
        return nextInt(max - min) + 1 + min;
    }

    public int nextExcExc(int min, int max) {
        return nextInt(max - min - 1) + 1 + min;
    }

    public int nextIncExc(int min, int max) {
        return nextInt(max - min) + min;
    }
}

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