生成指定范围的随机数
今天想生成一些测试数据,需要生成一些随机数,但发现这居然不是个很容易的活儿。折腾了2个小时,总算找到了一个比较完美的解决办法,适合0以上的范围。网上的很多例子都是错误的。
package misc;public class Test2 { public static void main(String[] args) { for (int i = 0; i < 100; i++) { System.out.println(genRandom(0,3)); } } 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也没有关系。 1 楼 bnmsmh 2012-08-19 start + random.nextInt(end - start)