java随机数不重复(随机数会重复吗)
各位老铁们好,相信很多人对java随机数不重复都不是特别的了解,因此呢,今天就来为大家分享下关于java随机数不重复以及随机数会重复吗的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!
java 产生随机不重复的数组
最简单(最快想到)的实现的实现方法:
首先创建一个数组,并为每个元素赋值-1;因为楼主要求从[0,n-1]中取数呀
其次for循环,随即取值依次填入数组中。
最后,在上面的for循环中加入判断语句,看随即产生的数是否与之前的数相同,如不相同,则添加,如相同,则将循环数减一,再次循环。就OK了
代码如下:
public int[] RandNum(int m, int n){
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++){
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—百度百科
好了,文章到此结束,希望可以帮助到大家。