2012-04-17 17 views
11

Ich möchte eine Zufallszahl vom Typ short genau wie es gibt eine Funktion für Integer-Typ namens Random.nextInt (134116). Wie kann ich es erreichen?kurze Zufallszahl in Java generieren?

+0

brauchen Sie negative Zahlen? – luketorjussen

+0

keine luke Ich brauche keine Negative nur von 0 bis maximal kurz – waqas

Antwort

19

Es gibt keine Random.nextShort() Methode, so dass Sie

short s = (short) Random.nextInt(Short.MAX_VALUE + 1); 

Die 1 ist, weil die Methode gibt eine Zahl auf die angegebene Nummer (exklusiv) nutzen könnten. Siehe here

Dies wird erzeugen Zahlen von 0 bis Short.MAX_VALUE inclusive (negative Zahlen wurden nicht durch die OP angefordert)

+0

Und eine Besetzung wird benötigt. –

+0

danke @juergend, ich habe die Antwort aktualisiert – luketorjussen

+0

Aber wenn Sie 1 hinzufügen, werden Sie nicht in der Lage sein, 0 zu generieren? – Tudor

6

Wie wäre es mit short s = (short) Random.nextInt();? Beachten Sie, dass die resultierende Verteilung möglicherweise eine Verzerrung aufweist. Die Java-Sprachspezifikation garantiert, dass dies nicht zu einer Exception führt, der Int wird abgeschnitten, um in einen Short zu passen.

EDIT

Eigentlich einen schnellen Test zu tun, scheint die resultierende Verteilung gleichmäßig zu verteilen.

+0

Was ist, wenn die generierte Zahl größer ist als in einem kurzen gehalten werden? – luketorjussen

+0

werden nur die letzten vier Bits beibehalten, aber es wird kein Überlauf erzeugt. – assylias

+0

aber wird es die fein abgestimmte Einheitlichkeit der erzeugten Zufallszahlen verändern? –

9

Java-Shorts in der -32 768 → +32 767 Intervall enthalten sind.

warum würden Sie nicht ein

Random.nextInt(65536) - 32768 

und werfen das Ergebnis in ein kurzes Variable durchführen?

+1

+1 - Ich wollte gerade genau das schreiben. – Deco

+4

Ich denke es und schrieb es für Sie, damit Sie die Lebensdauer Ihrer Tastatur verlängern würden. –

3

einfach einen int wie erzeugen:

short s = (short)Random.nextInt(Short.MAX_VALUE); 

Die erzeugte int im Wertebereich von short sein wird, so dass es ohne Datenverlust gegossen werden kann.

+0

Das erzeugt nicht-negative Kurzwerte, außer Short.MAX_VALUE –

8

Die effizienteste Lösung, die alle möglichen kurzen Werte erzeugen kann, ist beides.

short s = (short) random.nextInt(1 << 16); // any short 
short s = (short) random.nextInt(1 << 15); // any non-negative short 

oder sogar schneller

class MyRandom extends Random { 
    public short nextShort() { 
     return (short) next(16); // give me just 16 bits. 
    } 
    public short nextNonNegativeShort() { 
     return (short) next(15); // give me just 15 bits. 
    } 
} 

short s = myRandom.nextShort(); 
+2

Gut gemacht in der Tat. – assylias