甲鱼要学习
2019-02-26 22:48
代码如下:求解为什么生成的随机字符串里有a~z意外的字符?我的random函数哪里出错了?
//练习,随机字符串sort方法;
public void testSort3(){
List<String> stringList2= new ArrayList<String>();
Random random = new Random();
String s = new String();
for(int i=0;i<10;i++){
do{
int s_long = s.length();
Integer k=random.nextInt(10);
s_long=k;
//调用字符串生成函数;输入s_long取相应长度随机字符串;
s=randomString(s_long);
}while(stringList2.contains(s));
stringList2.add(s);
}
System.out.println("----------before sort()----------");
for(String string:stringList2){
System.out.println("随机字符串:"+string);
}
Collections.sort(stringList2);
System.out.println("----------after sort()----------");
for(String string:stringList2){
System.out.println("随机字符串:"+string);
}
}
public String randomString(int k){
String s="";
Random r=new Random();
for(int i=0;i<k;i++){
//a~z : 97~122
s=s+(char)Math.abs(r.nextInt()%26+97);
}
return s;
}
结果如下:
r.nextInt()%26+97的值不一定在97~122之间啊
改成r.nextInt(26)%26+97 就可以了
我和你思路一样利用ascii码
for(int j=0 ;j<10;j++) {
//创建char类型的数组用于存储十个随机生成的字符
char[] chars = new char[10];
for(int i=0 ;i<10;i++) {
//生成一个随机的Assic码值
int b = ran.nextInt(125);
//判断Asiic码值是否位于48-57或65-90或97-122之间
//Assic码值位于48-57或65-90或97-122之间为0-9、a-z、A-Z之间的字符
if((b>47 && b<58) || (b>64 && b<91) || (b>96&&b<123)) {
char a = (char)b;
chars[i] = a;
continue;
}
i--;
}
//将符合条件的字符数组转换为字符串
str = String.copyValueOf(chars);
//将字符串存入集合strList
strList.add(str);
Java入门第三季
409792 学习 · 4340 问题
相似问题