2012-04-17 145 views
11

我想生成一個隨機數類型short,就像有一個名爲Random.nextInt(134116)的整型函數一樣。我怎樣才能實現它?在java中產生短的隨機數?

+0

你需要負數? – luketorjussen 2012-04-17 10:06:11

+0

no luke我不需要負數只能從0到最大短缺 – waqas 2012-04-17 10:11:53

回答

19

沒有Random.nextShort()方法,所以你可以使用

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

+1是因爲該方法返回一個數達到規定數量(不包括)。見here

從0到Short.MAX_VALUE包容這將生成的數字(負數不是由OP請求)

+0

並且需要演員。 – 2012-04-17 10:00:58

+0

謝謝@juergend,我已更新答案 – luketorjussen 2012-04-17 10:01:41

+0

但是,如果您添加1,您將無法生成0? – Tudor 2012-04-17 10:02:20

6

short s = (short) Random.nextInt();怎麼樣?請注意,由此產生的分配可能有偏差。 Java語言規範保證這不會導致一個異常,這個int將被截斷以適合短小的內容。

編輯

實際上做一個快速的測試,得到的分佈似乎是均勻分佈了。

+0

如果生成的數字大於短於? – luketorjussen 2012-04-17 10:02:09

+0

只保留最後四位,但不會產生溢出。 – assylias 2012-04-17 10:03:18

+0

但它會改變生成的隨機數的微調均勻性嗎? – 2012-04-17 10:13:19

9

爪哇短褲包括在-32 768→32 767間隔。

你爲什麼不執行

Random.nextInt(65536) - 32768 

並將結果轉換成變量?

+1

+1 - 我正準備寫那個。 – Deco 2012-04-17 10:06:28

+4

我想它,併爲你寫,所以你會延長鍵盤的使用壽命。 – 2012-04-17 10:12:47

3

只需產生像int:

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

生成int將在short值空間,因此它可以在不丟失數據被鑄造。

+0

這將產生非負的短價值,除了Short.MAX_VALUE – 2012-04-17 10:14:21

8

可以產生所有可能的短值的最有效的解決方案是做。

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

甚至更​​快

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

確實做得很好。 – assylias 2012-04-17 10:23:02