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.

5voto

false9striker Punkte 1983

Sie könnten verwenden

RandomStringUtils.randomNumeric(int count)

Methode, die ebenfalls von Apache Commons stammt.

5voto

Hasee Amarathunga Punkte 1605

Dazu können Sie folgende Methode verwenden

int range = 10;
int min = 5
Random r = new Random();
int  = r.nextInt(range) + min;

5voto

Ich denke daran, die generierten Zufallszahlen linear in den gewünschten Bereich zu normalisieren, indem ich folgendes verwende. Sei x sei eine Zufallszahl, sei a y b der minimale und maximale Bereich der gewünschten normalisierten Zahl sein.

Im Folgenden finden Sie ein einfaches Codeschnipsel, um den durch die lineare Zuordnung erzeugten Bereich zu testen.

public static void main(String[] args) {
    int a = 100;
    int b = 1000;
    int lowest = b;
    int highest = a;
    int count = 100000;
    Random random = new Random();
    for (int i = 0; i < count; i++) {
        int nextNumber = (int) ((Math.abs(random.nextDouble()) * (b - a))) + a;
        if (nextNumber < a || nextNumber > b) {
            System.err.println("number not in range :" + nextNumber);
        }
        else {
            System.out.println(nextNumber);
        }
        if (nextNumber < lowest) {
            lowest = nextNumber;
        }
        if (nextNumber > highest) {
            highest = nextNumber;
        }
    }
    System.out.println("Produced " + count + " numbers from " + lowest
            + " to " + highest);
}

5voto

namezhouyu Punkte 224
Random random = new Random();
int max = 10;
int min = 3;
int randomNum = random.nextInt(max) % (max - min + 1) + min;

2 Stimmen

Eine Erklärung wäre angebracht.

4voto

monster Punkte 778

Die folgende Änderung wird vorgenommen in Versuch 1 sollte die Arbeit machen -

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

Siehe este für funktionierenden Code.

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