怎么生成指定范围的随机数

fxbird 2010-06-29 06:51:24
用Math.random()的方法并不可取。

比如下面的,取1-2之间的,总产生2.快被它弄晕了


public static int genRandom(int start,int end){
// return (int)((end-start)*Math.random())+1;
// return new Random(10).nextInt();
double d=Math.random();
System.out.println(d);
return start+(d==0?0:(int)(d+1));
}


...全文
235 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
liumingwei2009 2011-08-07
  • 打赏
  • 举报
回复

public static int getRandomInt(int start, int end) {
return (int) (Math.random()*(end-start+1))+start;
}


我也写了一个。
fxbird 2010-06-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sxzlc 的回复:]
int d = ((int)(Math.random()*100)+1) % 2 + 1;
System.out.println(d);
[/Quote]

经过你的提示,我改进了一个,如下,适合>=0的数,任意范围。

public static int genRandom(int start,int end){
return start+((int)(Math.random()*10*(end-start+2))%(end-start+1));
}



原理就是,假设R(a,b)代表a到b的随机数,那么a到b之间的随机数可以看成a+R(0,b-a),为了得到R(0,b-a),取模的数必须是b-a+1,而为了真正能实现大范围的取模,被取模的数一定要大于等于模数,否则,取的总是0,只要(b-a+2)*10就可以保证这个关系,当然你乘以10000也没有关系。
lacus87 2010-06-29
  • 打赏
  • 举报
回复
(int)(Math.random()*2)+1
sun0322 2010-06-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sxzlc 的回复:]
int d = ((int)(Math.random()*100)+1) % 2 + 1;
System.out.println(d);
[/Quote]

ctrl + c 去用之
sun0322 2010-06-29
  • 打赏
  • 举报
回复
int d = ((int)(Math.random()*100)+1) % 2 + 1;
System.out.println(d);
java_piao 2010-06-29
  • 打赏
  • 举报
回复
Math.round(Math.random()*9) 你试一下它是否只是一个数,它是产生一个1到9的随机数
Silence_Smile 2010-06-29
  • 打赏
  • 举报
回复
Random r=new Random();

Random()
创建一个新的随机数生成器。
Random(long seed)
使用单个 long 种子创建一个新的随机数生成器。
方法摘要
protected int next(int bits)
生成下一个伪随机数。
boolean nextBoolean()
返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 boolean 值。
void nextBytes(byte[] bytes)
生成随机字节并将其置于用户提供的 byte 数组中。
double nextDouble()
返回下一个伪随机数,它是取自此随机数生成器序列的、在 0.0 和 1.0 之间均匀分布的 double 值。
float nextFloat()
返回下一个伪随机数,它是取自此随机数生成器序列的、在 0.0 和 1.0 之间均匀分布的 float 值。
double nextGaussian()
返回下一个伪随机数,它是取自此随机数生成器序列的、呈高斯(“正态”)分布的 double 值,其平均值是 0.0,标准差是 1.0。
int nextInt()
返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的 int 值。
int nextInt(int n)
返回一个伪随机数,它是取自此随机数生成器序列的、在 0(包括)和指定值(不包括)之间均匀分布的 int 值。
long nextLong()
返回下一个伪随机数,它是取自此随机数生成器序列的均匀分布的 long 值。
void setSeed(long seed)
使用单个 long 种子设置此随机数生成器的种子。

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧