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

练习题,通过ASCII码实现,帮我看看有没有哪里不对,是否所有的字母和数字都包含了,谢谢!

import java.util.ArrayList;

import java.util.Collections;

import java.util.List;

import java.util.Random;


public class RandomString {


public void test(){

List<String> list=new ArrayList<String>();

Random random=new Random();

//通过for循环来设置字符串

for(int I=0;I<10;I++){

String z = "";

//随机生成字符串的长度数 1~9

int cd=random.nextInt(9)+1;

do{

//随机生成长度已定的字符串

for(int i=0;i<cd;i++){

int a;

do{

a=random.nextInt(75)+48;

}while(a>90 && a<97 || a>57 && a<65);

char b=(char)a;

z+=b;

}

}while(list.contains(z));

list.add(z);

}

System.out.println("--------排序前--------");

for (String string : list) {

System.out.print(string+",");

}

System.out.println();

System.out.println("--------排序后--------");

Collections.sort(list);

for (String string : list) {

System.out.print(string+",");

}

}

public static void main(String[] args) {

RandomString rs=new RandomString();

rs.test();

}

}


正在回答

2 回答

从运行来看,应该都包含在内了,如果你担心是不是覆盖了所有字母和数字,那不如先创建一个包含了所有字母和数字的字符串,新生成的随机字符串的字符均取自这个字符串,这样就不用担心了。

另外,创建可变的字符串变量,感觉 StringBuffer str=new StringBuffer(); 更合适一些。

这里列出另一种方法供参考:

List <String> strList= new ArrayList<String>();
		String base="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
		Random random=new Random();
	    Integer k;
	    for (int i=0; i<10;i++){
	    	StringBuffer str=new StringBuffer();
	    	do{
	    	k=random.nextInt(10);
	    	} while(k==0);
	    	do{
	    	for(int j=0;j<k;j++){
	  	      int num=random.nextInt(base.length());
	  	      str.append(base.charAt(num));
	  	    }
	    	}while(strList.contains(str.toString()));
	  	    strList.add(str.toString());
	    }


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

qq_之恩赫奥丶_0 提问者

谢谢!
2016-05-17 回复 有任何疑惑可以回复我~
#2

SilenceDean

第8行应改为k=random.nextInt(11); random.nextInt(10)取到的是[0,10),即k最大为9 字符串最多只能取到9位的长度
2016-07-08 回复 有任何疑惑可以回复我~

谢了,原来Java里不是128个字符都能显示出来的...

我把所有的128个ASCII码转为字符,做出来乱码...

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

举报

0/150
提交
取消

练习题,通过ASCII码实现,帮我看看有没有哪里不对,是否所有的字母和数字都包含了,谢谢!

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