你的位置:首页 > Java教程

[Java教程]随机生成长度为len的密码,且包括大写、小写英文字母和数字


一道华三面试题,随机生成长度为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;    }  }}