我想生成一個隨機數類型short,就像有一個名爲Random.nextInt(134116)的整型函數一樣。我怎樣才能實現它?在java中產生短的隨機數?
回答
沒有Random.nextShort()
方法,所以你可以使用
short s = (short) Random.nextInt(Short.MAX_VALUE + 1);
+1是因爲該方法返回一個數達到規定數量(不包括)。見here
從0到Short.MAX_VALUE包容這將生成的數字(負數不是由OP請求)
並且需要演員。 – 2012-04-17 10:00:58
謝謝@juergend,我已更新答案 – luketorjussen 2012-04-17 10:01:41
但是,如果您添加1,您將無法生成0? – Tudor 2012-04-17 10:02:20
short s = (short) Random.nextInt();
怎麼樣?請注意,由此產生的分配可能有偏差。 Java語言規範保證這不會導致一個異常,這個int將被截斷以適合短小的內容。
編輯
實際上做一個快速的測試,得到的分佈似乎是均勻分佈了。
如果生成的數字大於短於? – luketorjussen 2012-04-17 10:02:09
只保留最後四位,但不會產生溢出。 – assylias 2012-04-17 10:03:18
但它會改變生成的隨機數的微調均勻性嗎? – 2012-04-17 10:13:19
爪哇短褲包括在-32 768→32 767間隔。
你爲什麼不執行
Random.nextInt(65536) - 32768
並將結果轉換成短變量?
+1 - 我正準備寫那個。 – Deco 2012-04-17 10:06:28
我想它,併爲你寫,所以你會延長鍵盤的使用壽命。 – 2012-04-17 10:12:47
只需產生像int:
short s = (short)Random.nextInt(Short.MAX_VALUE);
生成int
將在short
值空間,因此它可以在不丟失數據被鑄造。
這將產生非負的短價值,除了Short.MAX_VALUE – 2012-04-17 10:14:21
可以產生所有可能的短值的最有效的解決方案是做。
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();
確實做得很好。 – assylias 2012-04-17 10:23:02
你需要負數? – luketorjussen 2012-04-17 10:06:11
no luke我不需要負數只能從0到最大短缺 – waqas 2012-04-17 10:11:53