捡起丢下一个多月的Java,重新复习书本上的东西,来到随机数这一部分:
问题:生成指定范围的随机数,比如生成[10,20)区间内的随机整数、生成[0,50]区间内的随机整数。
Java内有两种实现伪随机数的方法,一种是java.util.Random(需要手动导入),另一种是Math.random
##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只是作为一个种子,种子数只是随机算法的起源数字,和生成的随机数的区间没有任何关系,如果没有指定数字,则使用系统时间作为种子
nextInt或者nextDouble是指定一个数的最大范围,但不包括这个数,上面的代码生成的是[0,50]的整数,输出的仅是为了方便查看结果
##2.基于后者
/**
* 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,显式转换后就会是50
下面的代码是用random函数来生成[10,20)里的随机数:
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);
}
}
}
输出的结果:
19
19
12
18
10
13
16
18
11
10
10
16
14
15
19
另一种实现:
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);
}
}
}
两种方案都相当接近,使用时视情况选择吧,就酱
##一篇比较好的参考 随机数