首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Java随机数小结(转)

2012-08-26 
Java随机数总结(转)  System.out.println(r3 + r2)  System.out.println(r2 + r3)  }  public

Java随机数总结(转)

  System.out.println("r3 = " + r2);

  System.out.println("r2 = " + r3);

  }

  public static void testNoSeed() {

  System.out.println("--------------testNoSeed()--------------");

  //创建不带种子的测试Random对象

  Random random = new Random();

  for (int i = 0; i < 3; i++) {

  System.out.println(random.nextInt());

  }

  }

  public static void testSeed1() {

  System.out.println("--------------testSeed1()--------------");

  //创建带种子的测试Random对象

  Random random = new Random(555L);

  for (int i = 0; i < 3; i++) {

  System.out.println(random.nextInt());

  }

  }

  public static void testSeed2() {

  System.out.println("--------------testSeed2()--------------");

  //创建带种子的测试Random对象

  Random random = new Random();

  random.setSeed(555L);

  for (int i = 0; i < 3; i++) {

  System.out.println(random.nextInt());

  }

  }

  }

  运行结果:

  --------------test()--------------

  r1 = 1227108626582

  r3 = 0.5324887850155043

  r2 = -368083737

  --------------testNoSeed()--------------

  809503475

  1585541532

  -645134204

  --------------testSeed1()--------------

  -1367481220

  292886146

  -1462441651

  --------------testSeed2()--------------

  -1367481220

  292886146

  -1462441651

  Process finished with exit code 0

  通过testSeed1()与testSeed2()方法的结果可以看到,两个打印结果相同,因为他们种子相同,再运行一次,结果还是一样的,这就是带种子随机数的特性。

  而不带种子的,每次运行结果都是随机的。

  五、综合应用

  下面通过最近写的一个随机数工具类来展示用法:

  import java.util.Random;

  /**

  * 随机数、随即字符串工具

  * User: leizhimin

  * Date: 2008-11-19 9:43:09

  */

  public class RandomUtils {

  public static final String allChar = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

  public static final String letterChar = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

  public static final String numberChar = "0123456789";

  /**

  * 返回一个定长的随机字符串(只包含大小写字母、数字)

  *

  * @param length 随机字符串长度

  * @return 随机字符串

  */

  public static String generateString(int length) {

  StringBuffer sb = new StringBuffer();

  Random random = new Random();

  for (int i = 0; i < length; i++) {

  sb.append(allChar.charAt(random.nextInt(allChar.length())));

  }

  return sb.toString();

  }

  /**

  * 返回一个定长的随机纯字母字符串(只包含大小写字母)

  *

  * @param length 随机字符串长度

  * @return 随机字符串

  */

  public static String generateMixString(int length) {

  StringBuffer sb = new StringBuffer();

  Random random = new Random();

  for (int i = 0; i < length; i++) {

  sb.append(allChar.charAt(random.nextInt(letterChar.length())));

  }

  return sb.toString();

  }

  /**

  * 返回一个定长的随机纯大写字母字符串(只包含大小写字母)

  *

  * @param length 随机字符串长度

  * @return 随机字符串

  */

  public static String generateLowerString(int length) {

  return generateMixString(length).toLowerCase();

  }

  /**

  * 返回一个定长的随机纯小写字母字符串(只包含大小写字母)

  *

  * @param length 随机字符串长度

  * @return 随机字符串

  */

  public static String generateUpperString(int length) {

  return generateMixString(length).toUpperCase();

  }

  /**

  * 生成一个定长的纯0字符串

  *

  * @param length 字符串长度

  * @return 纯0字符串

  */

  public static String generateZeroString(int length) {

  StringBuffer sb = new StringBuffer();

  for (int i = 0; i < length; i++) {

  sb.append('0');

  }

  return sb.toString();

  }

  /**

  * 根据数字生成一个定长的字符串,长度不够前面补0

  *

  * @param num 数字

  * @param fixdlenth 字符串长度

  * @return 定长的字符串

  */

  public static String toFixdLengthString(long num, int fixdlenth) {

  StringBuffer sb = new StringBuffer();

  String strNum = String.valueOf(num);

  if (fixdlenth - strNum.length() >= 0) {

  sb.append(generateZeroString(fixdlenth - strNum.length()));

  } else {

  throw new RuntimeException("将数字" + num + "转化为长度为" + fixdlenth + "的字符串发生异常!");

  }

  sb.append(strNum);

  return sb.toString();

  }

  /**

  * 根据数字生成一个定长的字符串,长度不够前面补0

  *

  * @param num 数字

  * @param fixdlenth 字符串长度

  * @return 定长的字符串

  */

  public static String toFixdLengthString(int num, int fixdlenth) {

  StringBuffer sb = new StringBuffer();

  String strNum = String.valueOf(num);

  if (fixdlenth - strNum.length() >= 0) {

  sb.append(generateZeroString(fixdlenth - strNum.length()));

  } else {

  throw new RuntimeException("将数字" + num + "转化为长度为" + fixdlenth + "的字符串发生异常!");

  }

  sb.append(strNum);

  return sb.toString();

  }

  public static void main(String[] args) {

  System.out.println(generateString(15));

  System.out.println(generateMixString(15));

  System.out.println(generateLowerString(15));

  System.out.println(generateUpperString(15));

  System.out.println(generateZeroString(15));

  System.out.println(toFixdLengthString(123, 15));

  System.out.println(toFixdLengthString(123L, 15));

  }

  }

  运行结果:

  vWMBPiNbzfGCpHG

  23hyraHdJkKPwMv

  tigowetbwkm1nde

  BPZ1KNEJPHB115N

  000000000000000

  000000000000123

  000000000000123

  Process finished with exit code 0

  六、总结

  1、随机数很常用,在Java有三种产生方式,以Random随机数的使用最为复杂。

  2、Random类对象有是否带种子之分,带种子的只要种子相同,多次运行,生成随机数的结果总是那样。

  3、带种子随机数的带种子的对象创建方式有两种,效果一样。但是带种子的随机数用处似乎不大。

  4、Random的功能涵盖了Math.random()的功能。

  5、可以通过随机数去做实现随机字符串等复杂的随机数据。

  6、不要研究不重复的随机数,意义不大。

热点排行