2012-04-17 148 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