package cn.ffcs.ct10000.card;import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;public class TTEST {
public static String getCurrStrTime(int type){
Date date = new Date();
DateFormat formatter = null;
if(type == 1){
formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}else if(type == 2){
formatter = new SimpleDateFormat("yyyy-MM"); //检查每月一次的业务
}else if(type == 3){
formatter = new SimpleDateFormat("yyyyMMddHHmmss");
}else{
//默认
formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}
return formatter .format(date);
}
public static String getSno() {
Random rdm = new Random();
int i = rdm.nextInt(1000000)+1000000;
String str = "nx" + getCurrStrTime(3) + String.valueOf(i).substring(1,7);
return str;
}
public static void suijishu(){
//获得一个从100000到999999之间的整数
Random rdm = new Random();
for(int i=0; i<1000;i++){
int j;
j = rdm.nextInt(1000000)+1000000;
String str = "nx" + getCurrStrTime(3) + String.valueOf(j).substring(1,7);
System.out.println(str);
}
}
public static void t1(){
for(int i=0;i<100;i++){
String sno = getSno();
if(sno.length() != 2){
System.out.println(sno);
}
}
}
public static void t2(){
suijishu();
}
/**
* @param args
*/
public static void main(String[] args) {// t1();
t2();
}}
==============
为什么t1()就会出现很多一样的号码,而t2()则几乎每次出来的数都不一样?
难道我用getSno()来取得一个随机数,取到一样id的情况很多吗?
请高人指点!
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;public class TTEST {
public static String getCurrStrTime(int type){
Date date = new Date();
DateFormat formatter = null;
if(type == 1){
formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}else if(type == 2){
formatter = new SimpleDateFormat("yyyy-MM"); //检查每月一次的业务
}else if(type == 3){
formatter = new SimpleDateFormat("yyyyMMddHHmmss");
}else{
//默认
formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
}
return formatter .format(date);
}
public static String getSno() {
Random rdm = new Random();
int i = rdm.nextInt(1000000)+1000000;
String str = "nx" + getCurrStrTime(3) + String.valueOf(i).substring(1,7);
return str;
}
public static void suijishu(){
//获得一个从100000到999999之间的整数
Random rdm = new Random();
for(int i=0; i<1000;i++){
int j;
j = rdm.nextInt(1000000)+1000000;
String str = "nx" + getCurrStrTime(3) + String.valueOf(j).substring(1,7);
System.out.println(str);
}
}
public static void t1(){
for(int i=0;i<100;i++){
String sno = getSno();
if(sno.length() != 2){
System.out.println(sno);
}
}
}
public static void t2(){
suijishu();
}
/**
* @param args
*/
public static void main(String[] args) {// t1();
t2();
}}
==============
为什么t1()就会出现很多一样的号码,而t2()则几乎每次出来的数都不一样?
难道我用getSno()来取得一个随机数,取到一样id的情况很多吗?
请高人指点!
产生的随机数是否相同取决于随机数对象的状态,而随机数对象的状态取决于它们是否是同一个随机数对象。
Random rdm = new Random();表示创建一个随机数对象,所以用rdm来产生的随机数都一样,除非重新创建新的随机数对象。t1()只创建一次随机数对象,后面产生的随机数都是用到第一次创建的随机数对象,所以结果都相同。
而t2()采取调用suijishu();的方式来产生随机数,每调用一次suijishu();就创建一个新的随机数对象,所以肌肤每次都不同。