java之for循環生成隨機數,多次數據均為重復


一:出現問題的代碼

//生成手機號碼個數
int phonedata=${__Random(1,500,)};

StringBuffer phonedatalist = new StringBuffer();
for (int i=0;i<phonedata;i++){
////生成手機號碼后8位
phonedata1=${__time(/1000000,)};
String phonedata12=String.valueOf(phonedata1);

//隨機選取手機前三位
int phonedata=${__Random(0,27,)};
String[] phonelist = {"198","166","199","170","170","171","176","175","145","149","173","172","170","170","131","130","188","187","183","182","159","157","152","151","150","147","139","138"};
String phonedata2=phonelist[phonedata];

//隨機選取手機第四位
int phonedata31=${__Random(0,9,)};
String phonedata311=String.valueOf(phonedata31);

//拼裝成手機號碼
String phone=phonedata2+phonedata311+phonedata12;

phonedatalist.append(phone).append(",");
}

二:修改之后的代碼

//生成手機號碼個數
int phonedata=${__Random(1,500,)};

StringBuffer phonedatalist = new StringBuffer();

Random rand = new Random();

for (int i=0;i<phonedata;i++){
//生成手機號碼后8位
phonedata1=rand.nextInt(9999999) + 1000000;
String phonedata12=String.valueOf(phonedata1);

//隨機選取手機前三位
int phonedata=rand.nextInt(27) + 0;
String[] phonelist = {"198","166","199","170","170","171","176","175","145","149","173","172","170","170","131","130","188","187","183","182","159","157","152","151","150","147","139","138"};
String phonedata2=phonelist[phonedata];

//隨機選取手機第四位
int phonedata31=rand.nextInt(9) + 0;
String phonedata311=String.valueOf(phonedata31);

//拼裝成手機號碼
String phone=phonedata2+phonedata311+phonedata12;

phonedatalist.append(phone).append(",");
}

三:問題原因

1、問題還是出在隨機函數定義位置上,函數定義不能放在for循環里面,而是應該在for循環外面定義好。

引用其他地方學到東西:首先就是要知道偽隨機數Random的算法原理,其原理簡單來說:一個種子 ---〉經過一定的算法 --〉產生一個結果(同時更改種子本身)那么.Next的時候 新的種子 ---〉經過一定的算法 --〉產生另一個結果(同時再產生一個種子)通過這樣得到隨機的效果,也就是說如果初始種子一樣,那么后面得到的結果和順序基本上就是一樣的,


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM