首页编程java编程java随机数不重复(随机数会重复吗)

java随机数不重复(随机数会重复吗)

编程之家2026-06-03711次浏览

各位老铁们好,相信很多人对java随机数不重复都不是特别的了解,因此呢,今天就来为大家分享下关于java随机数不重复以及随机数会重复吗的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

java随机数不重复(随机数会重复吗)

java 产生随机不重复的数组

最简单(最快想到)的实现的实现方法:

首先创建一个数组,并为每个元素赋值-1;因为楼主要求从[0,n-1]中取数呀

其次for循环,随即取值依次填入数组中。

最后,在上面的for循环中加入判断语句,看随即产生的数是否与之前的数相同,如不相同,则添加,如相同,则将循环数减一,再次循环。就OK了

代码如下:

public int[] RandNum(int m, int n){

java随机数不重复(随机数会重复吗)

int[] arr=new int[m];

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

arr[i]=-1;

}

Random random=new Random();

B:for(int i=0;i<m;i++){

java随机数不重复(随机数会重复吗)

int num=random.nextInt(n);

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

if(arr[j]==num){

i--;

continue B;

}

}

arr[i]=num;

}

return arr;

}

当然还有其他思路,楼主可以自己开拓!

在java语言中如何随机地生成一个字符串

可以配合UUID或者GUID来实现

GUID是一个128位长的数字,一般用16进制表示。算法的核心思想是结合机器的网卡、当地时间、一个随机数来生成GUID。从理论上讲,如果一台机器每秒产生10000000个GUID,则可以保证(概率意义上)3240年不重复。

UUID是1.5中新增的一个类,在java.util下,用它可以产生一个号称全球唯一的ID

import java.util.UUID;

public class Test{

public static void main(String[] args){

UUID uuid= UUID.randomUUID();

System.out.println(uuid);

}

}

编译运行输出:

07ca3dec-b674-41d0-af9e-9c37583b08bb

两种方式生成guid与uuid

需要comm log库

/**

*@author Administrator

*

* TODO To change the template for this generated type comment go to

* Window- Preferences- Java- Code Style- Code Templates

*/

import java.net.InetAddress;

import java.net.UnknownHostException;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

import java.security.SecureRandom;

import java.util.Random;

public class RandomGUID extends Object{

protected final org.apache.commons.logging.Log logger= org.apache.commons.logging.LogFactory

.getLog(getClass());

public String valueBeforeMD5="";

public String valueAfterMD5="";

private static Random myRand;

private static SecureRandom mySecureRand;

private static String s_id;

private static final int PAD_BELOW= 0x10;

private static final int TWO_BYTES= 0xFF;

/*

* Static block to take care of one time secureRandom seed.

* It takes a few seconds to initialize SecureRandom. You might

* want to consider removing this static block or replacing

* it with a"time since first loaded" seed to reduce this time.

* This block will run only once per JVM instance.

*/

static{

mySecureRand= new SecureRandom();

long secureInitializer= mySecureRand.nextLong();

myRand= new Random(secureInitializer);

try{

s_id= InetAddress.getLocalHost().toString();

} catch(UnknownHostException e){

e.printStackTrace();

}

}

/*

* Default constructor. With no specification of security option,

* this constructor defaults to lower security, high performance.

*/

public RandomGUID(){

getRandomGUID(false);

}

/*

* Constructor with security option. Setting secure true

* enables each random number generated to be cryptographically

* strong. Secure false defaults to the standard Random function seeded

* with a single cryptographically strong random number.

*/

public RandomGUID(boolean secure){

getRandomGUID(secure);

}

/*

* Method to generate the random GUID

*/

private void getRandomGUID(boolean secure){

MessageDigest md5= null;

StringBuffer sbValueBeforeMD5= new StringBuffer(128);

try{

md5= MessageDigest.getInstance("MD5");

} catch(NoSuchAlgorithmException e){

logger.error("Error:"+ e);

}

try{

long time= System.currentTimeMillis();

long rand= 0;

if(secure){

rand= mySecureRand.nextLong();

} else{

rand= myRand.nextLong();

}

sbValueBeforeMD5.append(s_id);

sbValueBeforeMD5.append(":");

sbValueBeforeMD5.append(Long.toString(time));

sbValueBeforeMD5.append(":");

sbValueBeforeMD5.append(Long.toString(rand));

valueBeforeMD5= sbValueBeforeMD5.toString();

md5.update(valueBeforeMD5.getBytes());

byte[] array= md5.digest();

StringBuffer sb= new StringBuffer(32);

for(int j= 0; j< array.length;++j){

int b= array[j]& TWO_BYTES;

if(b< PAD_BELOW)

sb.append('0');

sb.append(Integer.toHexString(b));

}

valueAfterMD5= sb.toString();

} catch(Exception e){

logger.error("Error:"+ e);

}

}

/*

* Convert to the standard format for GUID

*(Useful for SQL Server UniqueIdentifiers, etc.)

* Example: C2FEEEAC-CFCD-11D1-8B05-00600806D9B6

*/

public String toString(){

String raw= valueAfterMD5.toUpperCase();

StringBuffer sb= new StringBuffer(64);

sb.append(raw.substring(0, 8));

sb.append("-");

sb.append(raw.substring(8, 12));

sb.append("-");

sb.append(raw.substring(12, 16));

sb.append("-");

sb.append(raw.substring(16, 20));

sb.append("-");

sb.append(raw.substring(20));

return sb.toString();

}

// Demonstraton and self test of class

public static void main(String args[]){

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

RandomGUID myGUID= new RandomGUID();

System.out.println("Seeding String="+ myGUID.valueBeforeMD5);

System.out.println("rawGUID="+ myGUID.valueAfterMD5);

System.out.println("RandomGUID="+ myGUID.toString());

}

}

}

java中boolean用法

”boolean“类型的值只有两个,即:false和true;通常都用在条件判断中

boolean bl= true;

if(bl){//代码分支}else{//另外一个代码分支};

解释:上面定义了一个波尔类型,它的值为真,下面的条件判断中会直接走进第一个”真“的分支。

备注:以上方法只是一个简单的举例,实际应用中”boolean“的值需要大量的条件判断,最后获取到是”真“或者”假“,但实现思路都是一致的,当”真“的时候做某些操作,其他情况进行相应的操作。

拓展资料:

boolean数据类型 boolean变量存储为 8位(1个字节)的数值形式,但只能是 True或是 False。

当作为一个构造函数(带有运算符 new)调用时,Boolean()将把它的参数转换成一个布尔值,并且返回一个包含该值的 Boolean对象。

如果作为一个函数(不带有运算符 new)调用时,Boolean()只将把它的参数转换成一个原始的布尔值,并且最终返回这个值。

boolean数据类型 boolean变量存储为 8位(1个字节)的数值形式,但只能是 True或是 False。boolean变量的值显示为 True或 False(在使用 Print的时候),或者#TRUE#或#FALSE#(在使用 Write#的时候)。

使用关键字 True与 False可将 boolean变量赋值为这两个状态中的一个。在java中boolean值只能是true和false,而不能用0和1代替,并且一定要小写。boolean operate是指布尔运算。在ansys软件中他的下拉菜单会提示进行的布尔运算项目。在有的程序语言中该类型的关键字是bool,如C++,用法相同。

参考资料:

Boolean—百度百科

好了,文章到此结束,希望可以帮助到大家。

java基本概念大全(java程序设计的重要概念)java运算符,java运算符有哪些