2016-03-20 10 views
1

Bei dieser Zufallsfunktion in JavaMaximale Reichweite in Zufallsfunktion in Java

Random rndm = new Random(); 
    for (int i = 0; i < 10000; i++) 
    { 
    myarray.add(i, rndm.nextInt()); 
    } 

Ich möchte wissen, wenn es keinen Bereich, was ist die maximale Reichweite von Zufalls-Funktion für integer und für lange

Antwort

2

Der Bereich ist Integer.MIN_VALUE bis Integer.MAX_VALUE (-2^31 zu 2^31-1) für nextInt() und ist ungefähr zu Long.MIN_VALUELong.MAX_VALUE (-2^63 zu 2^63-1) für nextLong().

Zitat von Random (Java Platform SE 8)

public int nextInt()

[...] Alle 2 möglich int-Werte werden mit (etwa) gleicher Wahrscheinlichkeit erzeugt.

[...]

public long nextLong()

[...]

Verfahren nextLong nach Klasse implementiert ist Zufall, als ob durch:

public long nextLong() { 
    return ((long)next(32) << 32) + next(32); 
} 
0

Laut java docs.

random.nextInt() 

Gibt den nächsten Pseudo-Zufall, gleichmäßig verteilt int Wert aus diesem zufälligen Sequenz des Zahlengenerators. So wird die maximale die Grenze von int sein, die 2^31-1

ist Wenn Sie ein gebunden festlegen möchten Sie nextInt(int bound) verwenden können. Gibt einen Pseudozufalls-, gleichverteilten int-Wert zwischen 0 (einschließlich) und dem angegebenen Wert (exklusiv) zurück, der aus der Sequenz dieses Zufallsgenerators stammt.

für lange, max-Wert ist 2^63-1

0

Weitere Informationen finden Sie unter grepcode

public int nextInt() { 
    return next(32); 
} 

    /* 
    * @param n the bound on the random number to be returned. Must be 
    *  positive. 
    * @return the next pseudorandom, uniformly distributed {@code int} 
    *   value between {@code 0} (inclusive) and {@code n} (exclusive) 
    *   from this random number generator's sequence 
    * @exception IllegalArgumentException if n is not positive 
    * @since 1.2 
    */ 
public int nextInt(int n) { 
    if (n <= 0) 
     throw new IllegalArgumentException("n must be positive"); 

    if ((n & -n) == n) // i.e., n is a power of 2 
     return (int)((n * (long)next(31)) >> 31); 

    int bits, val; 
    do { 
     bits = next(31); 
     val = bits % n; 
    } while (bits - val + (n-1) < 0); 
    return val; 
} 
Verwandte Themen