一道華三面試題,隨機生成長度為len的密碼,且包括大寫、小寫英文字母和數字,主要Random類的使用,random.nextInt(len)表示生成[0,len)整數。具體實現見下面代碼,已經很詳細了。
package TestProject;
import java.util.Random;
import java.util.Scanner;
/**
* 隨機生成長度為len的密碼,且包括大寫、小寫英文字母和數字
* @author xuhui
*/
public class Main {
static char[] bigNum = new char[26];
static char[] smallNum = new char[26];
static int[] num = new int[10];
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);//控制台輸入
int len = scanner.nextInt();//輸入密碼長度,保證大於2
String str = "";//密碼
init();
Random random = new Random();
//需要先隨機生成len長度中,大寫字母的個數,小寫字母的個數以及數字的個數,且保證每個個數都不能為0
int big_len = random.nextInt(len-2)+1;//random.nextInt(len)表示生成[0,len)整數,表示生成[1,len-1)整數;
int small_len = random.nextInt(len-big_len-1)+1;
int num_len = len-big_len-small_len;
//每一位生成對應的密碼
for(int i=0;i<big_len;i++){
str += bigNum[random.nextInt(26)];
}
for(int i=0;i<small_len;i++){
str += smallNum[random.nextInt(26)];
}
for(int i=0;i<num_len;i++){
str += num[random.nextInt(10)];
}
System.out.print(str);//只是生成前面是大寫字母-小寫字母-數字這樣的順序
}
public static void init(){
for(int i=65;i<=90;i++){//生成大寫字母表,對照ASIC表
bigNum[i-65]=(char) i;
}
for(int i=97;i<=122;i++){//生成小寫字母表
smallNum[i-97]=(char) i;
}
for(int i=0;i<=9;i++){//生成數字表
num[i]=i;
}
}
}