列举两种常用的:
第一种:new Random(),nextInt(10),范围是1~10,以括号里面的值限制范围。
1 public class Test { 2 public static void main(String[] args) { 3 Random random = new Random(3); 4 int ranNum = random.nextInt(10); 5 System.out.println(ranNum); 6 } 7 }
random里其实是一个数列,这个数列每一位的数字接近随机分布,可以从数学上证明,但是一个数列一定是确定的,也就是第一个是什么数,第二个什么数都是固定的,就像1,2,3,4.。。。但是可以通过一个种子选取数列的起始位置,例如,上面的数列从3开始,就是3,4,。。。这就使每次的随机数都不相同。而这个种子一般使用程序运行时对应时间的秒(从某一年开始总的秒数),每次的随机数就不同了,产生可以使用的伪随机数。
即种子用于随机数生成器初始化值,随机生成器对于特定的种子值总是产生相同的随机数序列。
一般Random random = new Random();系统采取当前时间毫秒数做种子数做到随机不然的话写了种子数随机数就是定值了。
而random.nextInt(10)这个方法的作用是生成一个随机的int值,该值介于[0,n)的区间,也就是0到n之间的随机int值,包含0而不包含n。
再举个列子:
public class Test { public static void main(String[] args) { Random random = new Random(9); int ranNum = random.nextInt(10); System.out.println(ranNum); } }
得到的结果只能是:9
第二种:Math.random()是令系统随机选取大于等于 0.0 且小于 1.0 的伪随机 double 值。例如:double a=Math.random()*(3-1)+1,设置一个随机1到3的变量。
(Math.random()*max-min)+min,用法如下:
1 public class Test { 2 public static void main(String[] args) { 3 double ranNum = (Math.random()*100-1)+1; 4 System.out.println(ranNum); 5 System.out.println("强转后:"+(int)ranNum); 6 } 7 }
结果如下图:
得到是一个double类型的数值,将它强转为int类型的就好了。