为了账号安全,请及时绑定邮箱和手机立即绑定

作业(利用ASCii码)

代码如下:求解为什么生成的随机字符串里有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;

}

结果如下:

https://img1.sycdn.imooc.com//5c75513300015b9404200389.jpg

正在回答

2 回答

r.nextInt()%26+97的值不一定在97~122之间啊

改成r.nextInt(26)%26+97 就可以了

0 回复 有任何疑惑可以回复我~
#1

甲鱼要学习 提问者

谢谢!!
2019-03-11 回复 有任何疑惑可以回复我~

我和你思路一样利用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);


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Java入门第三季
  • 参与学习       409789    人
  • 解答问题       4340    个

Java中你必须懂得常用技能,不容错过的精彩,快来加入吧

进入课程

作业(利用ASCii码)

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信