简单解释一下随机数,大佬请到文章尾部直接ctrl+c ctrl+v
一般情况,程序里面的随机数默认是0到1之前的一个数,比如java里面Random的nextDouble方法
import java.security.SecureRandom;
public class Demo2{
@Test
public void a1() {
SecureRandom random = new SecureRandom();
// 输出10次
for (int i = 0; i < 10; i++) {
System.out.println(random.nextDouble());
}
}
}
生成一个随机数,结果如下
最小是0.00一堆0,最后有个1
最大是0.99一堆9
这个随机数永远在0到1之间
当我们想要一个整数时,可以乘以10再取整(其他方式也行),范围就是0到10之间
@Test
public void a2() {
SecureRandom random = new SecureRandom();
// 输出10次
for (int i = 0; i < 10; i++) {
double v = random.nextDouble() * 10;
System.out.println(v);
System.out.println((int) v);
}
}
好,当我们需要6位验证码的时候,可以循环6次,每次获取一个整数(这是一个笨办法,显得没技术)
@Test
public void a3() {
SecureRandom random = new SecureRandom();
StringBuffer sb = new StringBuffer();
// 输出10次
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 6; j++) {
double v = random.nextDouble() * 10;
sb.append((int) v);
}
System.out.println(sb);
// 清空sb
sb.setLength(0);
}
}
然后就有些聪明的同学就说了,我直接乘以100000不就是6位数字了么
好,我们接着看
- 然后发现有的4位,有的5位,不是我们想要的结果,为什么会这样呢?
- 这个呀是因为,随机数是0到1之间的一个数字,有可能是0.000019123414,如果是种情况,那乘以100000就是1.9123414,取整数后就1。
- 为了预防这种情况,我们可以先乘以899999再加上100000,这样就可以避免最小值不够6位的问题了,哪怕最小值是0,加上100000也是6为数字。
效果如下
- 好了,random为我们提供了更便捷的随机数生成方式,就是下面的代码,可以直接获取整型
@Test
public void ee() {
SecureRandom random = new SecureRandom();
StringBuffer sb = new StringBuffer();
// 输出10次
for (int i = 0; i < 10; i++) {
// 每个随机数长度为6
for (int j = 0; j < 6; j++) {
sb.append(random.nextInt(10));
}
System.out.println(sb);
// 清空sb
sb.setLength(0);
}
}
@Test
public void cc() {
SecureRandom random = new SecureRandom();
for (int i = 0; i < 10; i++) {
System.out.println(random.nextInt(899999) + 100000);
}
}
效果如下