-
要实现的功能
生成N位包含大小写字母和数字的随机字符串 -
第一次实现
-
思路
1.定义char数组,然后使用
Math.random()
初始化。2.在for循环中遍历给char数组赋值。
-
实现
public class CharTest { public static void main(String[] args) { char []arr = new char[5]; for(int i=0;i<arr.length;i++){ int max=122,min=48; arr[i]=(char) (Math.random()*(max-min)+min); } for(char b :arr) { System.out.print(b); } } }
-
-
问题
题目要求生成的只包含大小写字母和随机数的字符串。但由于ASCII中有如下对应关系://48-57 0-9//65-90 A-Z//97-122 a-z。所以随机字符串存在非大小写字母和数字的情况。
-
第二次实现
- 实现思路
1.建立字符串数组,然后使用for循环。
2.在for循环中,使用while循换,条件为true。
3.在while里面产生一个随机字符,如果字符是数字或者字母,将此字符赋给字符数组,并break出while。进行下一次for循环。
4.如果没有产生数字或者字母,则结束本次产生的字符,重新while。
5.直到产生指定长度的字符,退出for循环。
6.然后将产生的字符数组传进String对象。
7.返回string。
break 和continue的方式解决只产生数字字母的难题。
public class CharTest {
/**
* @param args
*/
public static void main(String[] args) {
System.out.print(getRandomString(5));
}
public static String getRandomString(int length) {
char [] ch= new char[length];
for(int i =0;i<length;i++) {
while(true) {
char c = (char)(Math.random()*'z');
if(Character.isDigit(c) || (Character.isLetter(c))) {
ch[i] = c;
break;//跳出自己所在的那层循环
}else {
continue;//结束本次循环,会继续执行
}
}
}
String s = new String(ch);
return s;
}
}