package com.jjinfo.common.util;
import java.util.Arrays;
import java.util.Random;
/**
*
*/
public class RandomNumberGenerator {
/**
* 这是典型的随机洗牌算法。
* 流程是从备选数组中选择一个放入目标数组中,将选取的数组从备选数组移除(放至最后,并缩小选择区域)
* 算法时间复杂度O(n)
* @return 随机8为不重复数组
*/
public static String generateNumber() {
String no="";
//初始化备选数组
int[] defaultNums = new int[10];
for (int i = 0; i < defaultNums.length; i++) {
defaultNums[i] = i;
}
Random random = new Random();
int[] nums = new int[LENGTH];
//默认数组中可以选择的部分长度
int canBeUsed = 10;
//填充目标数组
for (int i = 0; i < nums.length; i++) {
//将随机选取的数字存入目标数组
int index = random.nextInt(canBeUsed);
nums[i] = defaultNums[index];
//将已用过的数字扔到备选数组最后,并减小可选区域
swap(index, canBeUsed - 1, defaultNums);
canBeUsed--;
}
if (nums.length>0) {
for (int i = 0; i < nums.length; i++) {
no+=nums[i];
}
}
return no;
}
private static final int LENGTH = 8;
private static void swap(int i, int j, int[] nums) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
public static String generateNumber2() {
String no="";
int num[]=new int[8];
int c=0;
for (int i = 0; i < 8; i++) {
num[i] = new Random().nextInt(10);
c = num[i];
for (int j = 0; j < i; j++) {
if (num[j] == c) {
i--;
break;
}
}
}
if (num.length>0) {
for (int i = 0; i < num.length; i++) {
no+=num[i];
}
}
return no;
}
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
// System.out.println(generateNumber());
System.out.println(generateNumber2());
}
}
}
分享到:
相关推荐
标题提到的“利用时间生成8位不重复数”就是这样一个策略,它基于当前时间的时间戳来生成特定长度的不重复数字。 时间戳是一个非常有效的资源,因为它代表了从1970年1月1日00:00:00 UTC到当前时刻的总秒数。由于每...
在IT行业中,生成随机不重复的数字编号是一种常见的需求,特别是在创建唯一标识符或进行数据处理时。本文主要探讨了两种方法来生成8位随机不重复的数字编号。以下是对这两种方法的详细解释: 方法一: 这个方法基于...
2. **去除重复**:为了确保生成的随机数不重复,可以使用HashSet或数据库来存储已经生成过的随机数,每次生成新数时,都会先检查该数是否已存在,如果不存在则添加并返回,否则继续生成新的随机数。 3. **数据库...
这是自动生成不重复主键的代码包,直接导包进入程序即可使用,帮助生成由字母数字组成的16位id号,可以用于数据库主键存储(使用数据库自增主键始终有问题,不适合大型程序的使用),该代码包运用于很多大型企业级...
- **效率**:生成随机码的速度,尤其是在高并发环境下的性能。 - **可读性**:对于人眼友好的应用,可能需要考虑随机码的可读性。 - **扩展性**:随着系统规模扩大,方法是否还能保持唯一性。 通过这个Demo项目,...
在给定的标题“用js写的随机创建几位重复的密码”中,我们可以理解到这是一个利用JavaScript生成随机密码的功能,可能是为了自动化生成一批具有特定重复性或模式的密码,以满足批量分配或测试的需求。 描述中提到...
本文主要关注的是如何在条码软件中实现0-9个位数字的随机生成,这是自动化生产和数据处理过程中的一个重要环节。随机生成的数字常用于创建唯一的产品标识或追踪代码,确保数据的准确性和效率。 首先,我们来看"随机...
Java编程实现生成给定范围内不重复随机数的方法小结 Java编程实现生成给定范围内不重复随机数的方法是非常重要的一种技术,本文将主要介绍Java编程实现生成给定范围内不重复随机数的方法,结合实例形式总结分析了...
这通常是足够的,因为全字母数字字符集(62个字符)的32位长度可以生成超过2^96个不同的组合,远超过地球上的原子数量,所以几乎不可能出现重复。 然而,如果你需要更高效或特定类型的ID(例如,纯数字或者基于...
这个类可以生成伪随机数,但为了确保序列号的独特性,我们可以使用`Guid`类,它能生成全局唯一的标识符。 三、`Guid`类的应用 `Guid`(全局唯一标识符)是C#中用于生成128位唯一值的类。生成的`Guid`通常以32位十六...
然而,仅仅生成随机数并不能满足题目要求,我们还需要确保这100个数字是不同的。一种常见的方法是使用HashSet,它是一个不允许有重复元素的集合。我们可以不断生成随机数,直到HashSet中包含了100个不同的数字。 ...
这将生成一个随机数生成器,其种子默认基于当前时间,确保每次运行程序时产生的序列不重复。 2. **生成整数随机数**: 要生成一个指定范围内的整数,可以使用`nextInt()`方法。例如,如果你想生成1到100之间的...
为了保证数字的随机性,可以使用Math对象中的random()函数生成0到1之间的随机数,再乘以一个基数(比如90)并加上100,最后转换为字符串格式。 ```javascript let randomNumber = Math.round(Math.random() * 89 + ...
为了测试在极短时间内(例如1秒内)生成的唯一数字是否真的不重复,可以使用一个循环来模拟多个并发请求。在给出的示例中,使用`for`循环生成了10个测试用例,所有结果均未发现重复。 ```python for _ in range(10)...
例如,生成3个0-9之间的随机数字,拼接在毫秒数后面,使得ID更加复杂,降低冲突的可能性。 以下是一个简单的实现示例: ```java import java.util.concurrent.ThreadLocalRandom; public class IDUtils { public...
通过设定一定的规则,例如学生编号范围,软件可以生成一个随机的数字,对应于班级中的一位学生。为了保证公平性,我们使用了伪随机数生成器,并确保每次启动或设置新的随机种子后,都能得到不重复的结果。 其次,...
2. 防止重复:生成器确保生成的单号不重复,避免了因重复单号导致的混淆和处理错误。 3. 数据管理:对于电商企业来说,有效的单号管理能够优化库存、订单处理和物流效率。 二、快递单号的构成 快递单号通常由字母和...
在标题"随机抽票系统代码"中,我们可以理解这是一个关于如何编写程序来生成随机抽选结果的示例。这样的系统可以用于各种场景,如抽奖、选择随机样本或者在游戏中的随机事件等。 在描述中提到,“随机数产生设定好...
通过将当前时间戳转换为特定格式(例如,去掉毫秒部分,只保留秒级精度),然后结合随机数或者递增序列,可以快速生成不重复的单号。这种方法保证了单号的唯一性,并且可以轻松扩展以满足大量生成的需求。 另外,...
在编程中,伪随机数生成器(PRNG)是通过特定算法计算出来的数字序列,尽管这些数字看似随机,但实际上它们是确定性的。这意味着如果你给定相同的种子(初始值),PRNG将始终生成相同的数字序列。然而,在“小飞侠...