捡起丢下一个多月的Java,从新复习书本上的东西,来到随机数这一部分:
问题:生成指定范围的随机数,好比生成[10,20)区间内的随机整数、生成[0,50]区间内的随机整数。html
Java内有两种实现伪随机数的方法,一种是java.util.Random(须要手动导入),另外一种是Math.randomjava
##1.基于Random类算法
import java.util.Random; /** * Created by Administrator on 2016/11/26. */ public class Ram { public static void main(String[] args){ Random b = new Random(20); int a = b.nextInt(51); while (a != 50){ a = b.nextInt(51); System.out.println(a); if (a == 50){ System.out.println("Hell yeah"); } } System.out.println(a); } }
解释下:在实例化时的20只是做为一个种子,种子数只是随机算法的起源数字,和生成的随机数的区间没有任何关系,若是没有指定数字,则使用系统时间做为种子dom
nextInt或者nextDouble是指定一个数的最大范围,但不包括这个数,上面的代码生成的是[0,50]的整数,输出的仅是为了方便查看结果函数
##2.基于后者3d
/** * Created by Administrator on 2016/11/27. */ public class Ram1 { public static void main(String[] args){ int a = (int)(Math.random()*51); while (a != 50){ a = (int)(Math.random()*51); System.out.println(a); if (a == 50){ System.out.println(a); break; } } System.out.println(a); } }
random()会生成一个[0,1)内的浮点数,若是你想生成[0,50]的整数,你须要在Math.random()后乘51,再进行显式转换。若是你想把区间收缩,好比[10,50],你须要在乘41后再加10,这样,最小的数值就是10,而最大的数值不会超过51,显式转换后就会是50code
下面的代码是用random函数来生成[10,20)里的随机数:htm
public class Ram1 { public static void main(String[] args){ for(int i = 0;i < 15;i++){ int a = (int)(Math.random()*10+10); System.out.println(a); } } }
输出的结果:blog
19 19 12 18 10 13 16 18 11 10 10 16 14 15 19
另外一种实现:get
import java.util.Random; /** * Created by Administrator on 2016/11/26. */ public class Ram { public static void main(String[] args){ Random b = new Random(); for(int i = 0;i < 15;i++){ int a = b.nextInt(10)+10; System.out.println(a); } } }
两种方案都至关接近,使用时视状况选择吧,就酱
##一篇比较好的参考 随机数