java随机⽣成100个⼩写字母_Java⽣成随机字符串,必须包含
数字、⼩写字母、⼤写字母...
⼀道算法题,⽣成随机字符串,必须包含数字、⼩写字母、⼤写字母。
为了⽣成随机数⽅便,特别编写StdRandom类(注1),API如下。
public class StdRandom
static double random()
java生成随机数的方法0到1之间的实数 [0,1)
static int uniform(int N)
0到N-1之间的整数[0,N)
static int uniform(int lo,int hi)
lo到hi-1之间的整数[lo,hi)
static double uniform(double lo,double hi)
lo到hi之间的实数[lo,hi)
了解了StdRandom类API以后,就来看⼀下⽣成随机字符串的RandomStr类是如何完成任务的。(辅助类StdRandom最后介绍。) RandomStr.java
public class RandomStr {
/**
* 单元测试
* 运⾏: java RandomStr 4 (⽣成长度为4的字符串)
*/
public static void main(String[] args){
int len = Integer.parseInt(args[0]);;
System.out.println(randomStr(len));
}
/**
* 返回随机字符串,同时包含数字、⼤⼩写字母
* @param len 字符串长度,不能⼩于3
* @return String 随机字符串
*/
public static String randomStr(int len){
if(len < 3){
throw new IllegalArgumentException("字符串长度不能⼩于3");
}
//数组,⽤于存放随机字符
char[] chArr = new char[len];
//为了保证必须包含数字、⼤⼩写字母
chArr[0] = (char)('0' + StdRandom.uniform(0,10)); chArr[1] = (char)('A' + StdRandom.uniform(0,26)); chArr[2] = (char)('a' + StdRandom.uniform(0,26)); char[] codes = { '0','1','2','3','4','5','6','7','8','9',
'A','B','C','D','E','F','G','H','I','J',
'K','L','M','N','O','P','Q','R','S','T',
'U','V','W','X','Y','Z','a','b','c','d',
'e','f','g','h','i','j','k','l','m','n',
'o','p','q','r','s','t','u','v','w','x',
'y','z'};
//charArr[3..len-1]随机⽣成codes中的字符
for(int i = 3; i < len; i++){
chArr[i] = codes[StdRandom.uniform(0,codes.length)]; }
//将数组chArr随机排序
for(int i = 0; i < len; i++){
int r = i + StdRandom.uniform(len - i);
char temp = chArr[i];
chArr[i] = chArr[r];
chArr[r] = temp;
}
return new String(chArr);
}
}
看⼀下辅助类StdRandom。
StdRandom.java
public final class StdRandom {
//随机数⽣成器
private static Random random;
//种⼦值
private static long seed;
//静态代码块,初始化种⼦值及随机数⽣成器static {
seed = System.currentTimeMillis(); random = new Random(seed);
}
//私有构造函数,禁⽌实例化
private StdRandom() {}
/**
* 设置种⼦值
* @param s 随机数⽣成器的种⼦值
*/
public static void setSeed(long s){
seed = s;
random = new Random(seed);
}
/**
* 获取种⼦值
* @return long 随机数⽣成器的种⼦值
*/
public static long getSeed(){
return seed;
}
/**
* 随机返回0到1之间的实数 [0,1)
* @return double 随机数
*/
public static double uniform(){
Double();
}
/**
* 随机返回0到N-1之间的整数 [0,N)
* @param N 上限
* @return int 随机数
*/
public static int uniform(int N){
Int(N);
}
/**
* 随机返回0到1之间的实数 [0,1)
* @return double 随机数
*/
public static double random(){
return uniform();
}
/**
* 随机返回a到b-1之间的整数 [a,b)
* @param a 下限
* @param b 上限
* @return int 随机数
*/
public static int uniform(int a,int b){
return a + uniform(b - a);
}
/**
* 随机返回a到b之间的实数
* @param a 下限
* @param b 上限
* @return double 随机数
*/
public static double uniform(double a,double b){
return a + uniform() * (b - a);
}
}
注1:StdRandom类来⾃《算法(第4版)》 第⼀章 《基础编程模型》, 作者 Robert Sedgewick 、 Kevin Wayne。本⽂中的StdRandom类是精简版本,删除了其他未⽤到的⽅法。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论