java生成随机数——六位随机数

来源:互联网 发布:智联招聘java 编辑:程序博客网 时间:2024/09/21 09:26

package com.nit.superlu.Junit;public class Test6 {public static void main(String[] args) {run(1);run(2);run(3);}/** * 方案一:逐位随机取值,转成字符串,然后再拼接成6位的字符串 *  * @return 6位字符串 */public static String getRandNumber1() {StringBuffer numStr = new StringBuffer();int num;for (int i = 0; i < 6; i++) {// Math.random() 随机出0-1之间的实数,返回值是一个double 类型的num = (int) (Math.random() * 10);numStr.append(String.valueOf(num));}return numStr.toString();}/** * 方案二:随机出来的数乘上900000 得到一个0-900000的数,再加上100000就得到100000-1000000的六位数 *  * 弊端:第一位为0的情况被排除 *  *  * @return 最多6位的整数 */public static int getRandNumber2() {int num = (int) (Math.random() * 900000) + 100000;return num;}/** * 方案三:将随机出来的数,直接转成字符串,然后截取小数点后六位。 *  * 弊端:效率较低, *  * 因为调用substring(int beginIndex, int endIndex) 时,它内部又需要调用String(value, * beginIndex, subLen) 构造器 *  * String(value, beginIndex, subLen) 内部又要调用Arrays.copyOfRange(value, offset, * offset+count) 方法 *  * Arrays.copyOfRange(value, offset, offset+count) 内部又调用了一个方法,这个方法的实现不是用java * 编写的,然后才返回结果 *  * 一圈下来所以耗费时间 *  * @return 六位的字符串 */public static String getRandNumber3() {String numStr;numStr = String.valueOf(Math.random());// subString(int begin,int end); 截取[begin,end)范围内的字符串return numStr.substring(2, 8);}/** * 测试一下每个函数运行的效率,循环个10万次 *  * @param n *            指定哪个函数 */public static void run(int n) {long start = System.currentTimeMillis();for (int i = 0; i < 1000000; i++) {if (n == 1) {getRandNumber1();}if (n == 2) {getRandNumber2();}if (n == 3) {getRandNumber3();}}long end = System.currentTimeMillis();System.out.println(("getRandNumber" + n + ": ") + (end - start));}}





不知道方案二还能不能优化下

1 0