java生成随机数的方法

作者:wo_soul 时间:2023-12-12 12:49:51 

本文实例讲述了java生成随机数的方法。分享给大家供大家参考。具体实现方法如下:


package com.tool.code;
import java.util.Random;
public class RandomNum {
private static char ch[] = {
'0', '1', '2', '3', '4', '5', '6', '7', '8',
'9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y',
'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y',
'z', '0', '1' };
//最后又重复两个0和1,因为需要凑足数组长度为64
private static Random random = new Random();
//生成指定长度的随机字符串
public static String createRandomString(int length) {
if (length > 0) {
 int index = 0;
 char[] temp = new char[length];
 int num = random.nextInt();
 for (int i = 0; i < length % 5; i++) {
  temp[index++] = ch[num & 63];
  //取后面六位,记得对应的二进制是以补码形式存在的。
  num >>= 6;//63的二进制为:111111
  // 为什么要右移6位?因为数组里面一共有64个有效字符。
  //为什么要除5取余?因为一个int型要用4个字节表示,也就是32位。
 }
 for (int i = 0; i < length / 5; i++) {
  num = random.nextInt();
  for (int j = 0; j < 5; j++) {
   temp[index++] = ch[num & 63];
   num >>= 6;
  }
 }
 return new String(temp, 0, length);
} else if (length == 0) {
 return "";
} else {
 throw new IllegalArgumentException();
}
}
//根据指定个数,测试随机字符串函数的重复率
public static double rateOfRepeat(int number){
int repeat=0;
String[] str=new String[number];
for(int i=0;i<number;i++){//生成指定个数的字符串
 str[i]=RandomNum.createRandomString(10);
}
for(int i=0;i<number;i++){//查找是否有相同的字符串
 for(int j=i+1;j<number-1;j++){
  if(str[i].equals(str[j]))
   repeat++;
 }
}
return ((double)repeat)/number;
}
public static void main(String[] args) {
System.out.println(RandomNum.createRandomString(16)+"-"+RandomNum.createRandomString(16));
double rate=RandomNum.rateOfRepeat(10000);//测试10000次的重复率
System.out.println("重复率:"+rate);
}
}

控制台运行效果如下:

java生成随机数的方法

希望本文所述对大家的java程序设计有所帮助。

标签:java,随机数
0
投稿

猜你喜欢

  • Java实现多线程大批量同步数据(分页)

    2021-12-18 17:41:18
  • Java常用锁synchronized和ReentrantLock的区别

    2023-06-01 04:42:21
  • 深入讲解SPI 在 Spring 中的应用

    2022-10-21 03:44:55
  • 使用java打印心型、圆形图案的实现代码

    2021-08-30 19:50:45
  • 如何解决修改StaticText的字体

    2023-05-25 08:40:14
  • Android仿QQ、微信聊天界面长按提示框效果

    2023-06-11 14:04:32
  • java中set接口使用方法详解

    2023-03-15 06:10:12
  • jdk-logging log4j logback日志系统实现机制原理介绍

    2022-03-22 11:45:28
  • Java创建对象(显式创建和隐含创建)

    2022-10-26 13:58:33
  • c# 委托的常见用法

    2021-08-11 13:44:05
  • 详解SpringMVC验证框架Validation特殊用法

    2023-06-08 22:23:29
  • android安装后启动出错解决

    2021-10-31 12:13:26
  • DevExpress设置饼状图的Lable位置实例

    2022-02-02 15:53:37
  • 详解用Eclipse如何创建Web项目

    2023-11-11 05:41:01
  • Mybatis无法获取带有下划线前缀的字段的值问题

    2023-07-20 10:06:33
  • C# 实现FTP客户端的小例子

    2022-06-09 13:19:13
  • emoji表情与unicode编码互转的实现(JS,JAVA,C#)

    2023-02-07 06:07:48
  • 详解Android通知栏沉浸式/透明化完整解决方案

    2023-09-06 03:59:11
  • 使用SpringBoot-JPA进行自定义保存及批量保存功能

    2022-05-26 22:42:43
  • Android源代码仓库及其管理工具Repo分析详解

    2021-09-01 12:16:18
  • asp之家 软件编程 m.aspxhome.com