问答详情
源自:6-5 应用 Collections.sort() 实现 List 排序

作业(利用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://img4.mukewang.com/5c75513300015b9404200389.jpg

提问者:甲鱼要学习 2019-02-26 22:48

个回答

  • 星曦Star
    2019-02-28 12:26:10
    已采纳

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

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

  • 慕慕6073416
    2019-06-25 17:20:59

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