2012-03-24 13 views
1

Ich muss eine zufällige mit einer 16-stelligen Zahl zu tun. Und die zufällige Funktion, die ich bekommen habe, funktioniert nicht mit großen Zahlen. Ich habe diese Funktion:zufällige 16-stellige Nummer Funktion in Java

int pin = new Random().nextInt(10000); 

Aber wenn ich eine große Zahl wie 1000000000000 setzen, wird es nicht funktionieren, weil es nicht int und die nextLong funktioniert nicht so mit mir. Danke.

+0

Warum können Sie 'nextLong()' nicht benutzen und Divisionen und 'Mod's machen? Auch, ist das Mathe oder Java Hausaufgaben? Denn wenn Sie Mathe-Hausaufgaben machen, sind Feinheiten damit verbunden, eine gleichmäßig verteilte Pseudozufallssequenz zu erhalten. –

+0

'nextLong' und' mod' sind ein guter Weg, _bitten_ durch die Feinheiten, die in einer gleichmäßig verteilten pseudozufälligen Sequenz involviert sind, zu bekommen. –

Antwort

3

Sie könnten zwei Zufallszahlen verketten, um eine längere Zufallszahl zu erstellen. So

:

  1. Erhalten Sie eine 8-stellige Zufallszahl nextInt (100000000).
  2. Bit verschiebt es 8 Zehnen, oder etwa 10 Bits nach links.
  3. Holen Sie sich eine zweite 8-stellige Zufallszahl.
  4. Bitweise OR die beiden Zahlen, um Ihre endgültige Lange Zufallszahl zu erhalten.

Macht das Sinn?

+0

Ja, das macht Sinn. Ich habe darüber nachgedacht, aber ich habe nach einem kürzesten Weg gesucht, aber vielen Dank. –

+0

Linke Verschiebung von 8 Bits tut nicht was Sie wollen. Die nächste Annäherung ist 10 Bits für jedes x 1000. –

+0

Ja, Entschuldigung. Sie müssen 8 Zehnerstellen nach links verschieben, so dass ungefähr 10 binäre Bits vorhanden sind. – dcow

-1

Wenn Sie beliebig große Zufallszahlen mit N Ziffern erzeugen möchten, versuchen

StringBuffer buf=new StringBuffer(); 
rng=new Random(); 
for(int a=0;a<N;a++) 
    buffer.append((char) ('0'+rng.nextInt(10))); 
return buffer.toString(); 
+0

Sie sollten Antworten in Hausaufgabenfragen nicht veröffentlichen. Er lernt, und anstatt ihm die Antwort zu geben, sollten wir ihm helfen, mit seinen eigenen Beinen zur Antwort zu kommen. – SHiRKiT

0

Vielleicht möchten Sie zu werfen Sie einen Blick auf die documentation for Random.nextInt(int n), die den verwendeten Algorithmus diskutiert, und passen Sie es an die Arbeit mit Longs.

Aus der Dokumentation:

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; 
} 

Folgen Sie den Link und die Dokumentation für weitere Informationen lesen.