隨機生成一個幾位數(shù)虐拓,這種比較常見的操作今天我們來看一下心俗,例如隨機生成6位數(shù),直接來簡單明了的吧:
int num = (int) ((Math.random() * 9 + 1) * 100000);
最終num就是需要的6位隨機數(shù)蓉驹。
同理要是想得到隨機的五位數(shù)和七位數(shù)呢城榛?
//隨機的五位數(shù)
int num = (int) ((Math.random() * 9 + 1) * 10000);
//隨機的七位數(shù)
int num = (int) ((Math.random() * 9 + 1) * 1000000);
以此類推想得到隨機的n位數(shù)都可以,只需要改動后面的100000就好态兴。
如果想生成隨機的六位數(shù)狠持,并且每位數(shù)都不重復(fù):
//隨機生成六位數(shù),并且每位數(shù)都不重復(fù)
public static int Num() {
int[] array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
Random rand = new Random();
for (int i = 10; i > 1; i--) {
int index = rand.nextInt(i);
int tmp = array[index];
array[index] = array[i - 1];
array[i - 1] = tmp;
}
int result = 0;
for (int i = 0; i < 6; i++) {
result = result * 10 + array[i];
}
if (String.valueOf(result).length() == 6) {
return result;
} else {
return Num();
}
}
以上就是隨機生成的六位數(shù)瞻润,并且可以達(dá)到每位數(shù)都不重復(fù)喘垂。
·········································分割性········································
針對有技術(shù)朋友說可能會生成首位是0的數(shù)字,這樣生成的隨機數(shù)就變成了五位數(shù),在此我做一下論證:
首先Math.random()的意思是得到一個范圍在0-1之間的double類型的隨機小數(shù)(例如:0.52015784514绍撞,也有可能是0.00597308946201)正勒;
Math.random()的取值是0-1之間的隨機小數(shù)(事實上取不到0和1);
Math.random() * 9表示乘以9以后是0-9之間的隨機小數(shù)傻铣,也就是0.****到8.****之間的小數(shù)(大于0而小于9)章贞;
(Math.random() * 9 + 1)表示:"+1"之后就會得到1-9之間的隨機小數(shù),也就是1.******到9.*******之間的小數(shù)非洲;
((Math.random() * 9 + 1) * 100000)表示:乘以100000后阱驾,這個隨機小數(shù)的小數(shù)點就會往后移六位,得到1*****.*****到9*****.******之間的數(shù)字(現(xiàn)在小數(shù)點前是六位數(shù))就谜;
最后(int) ((Math.random() * 9 + 1) * 100000)表示:經(jīng)過int類型轉(zhuǎn)換之后封字,得到了首位數(shù)一定不是0的隨機六位數(shù)地来;
還可以通過以下代碼運行之后打印結(jié)果看一下:
//生成一千個隨機六位數(shù)
for (int i = 0; i < 5000; i++) {
int num = (int) ((Math.random() * 9 + 1) * 100000);
System.out.println("隨機生成的六位數(shù):" + num);
String num_str = String.valueOf(num);
//驗證是否會生成五位數(shù)畜埋,或者首位是0的數(shù)
if (num_str.length() == 5) {
System.out.println("生成的五位數(shù):" + num);
}
}
以上代碼是生成了5000個隨機的六位數(shù),以下是結(jié)果: