黑马程序员技术交流社区
标题:
密码的自动生成器
[打印本页]
作者:
谢辉林
时间:
2013-3-11 15:03
标题:
密码的自动生成器
//密码的自动生成器:密码由大写字母/小写字母/数字组成,生成六位随机密码;
import java.util.Random;
public class TestPassword {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
char[] pardStore=new char[62];
//把所有的大写字母放进去
for(int i=0;i<20;i++){
pardStore[i]=(char)('A'+i);
}
//把所有的小写字母放进去
for(int i=26;i<52;i++){
pardStore[i]=(char)('a'+i);
}
//吧0到9放进去
for(int i=52;i<62;i++){
pardStore[i]=(char)('0'+(i-52));
}
//生成6位随机密码
Random r=new Random();
for(int i=0;i<6;i++){
int n=r.nextInt(62);
System.out.print(pardStore[n]);
}
}
}
请问还有更好实现的方法吗?
作者:
江华
时间:
2013-3-11 16:18
1、先说想法,大家评判一下
2、分析
你的这个方法是把 数字、大写字母、小写字母 保存在一个中间数组中,随机生成角标,打印对应的信息。
这样有一个存入数据的过程,而我们都知道,数字、大写字母、小写字母都有对应ascii值,
这些信息是已经存在的值,我们完全可以利用,直接随机生成对应的值
3、思路
ascii码表中对应的信息,如下所示:
数字 0~9 对应的ascii值是 (48~57)
大写字母 A~Z 对应的ascii值是 (65~90)
小写字母 a~z 对应的ascii值是 (97~122)
根据以上信息,我们发现
ascii的值是在 48~122之间但是不包含(58~64和91~96)这13个数。
也可这样说,ascii的值是在 ( 0~74之间但是不包含(10~16和43~48,这13个数 )+48 。
所以,ascii的区间也就是 Random().nextint(74)+48 (不包含10~16和43~48)
设计一个类,专门生成符合要求的随机数(这个类还有进行编译,之后是一个设计思想)
class SuiJiShu
{
random r= new random();
int rInt=r.nextint(74)+48 ;
if (rint>=10 || rint<=16 ) or (rint>=43 || rint<=48 )
SUIJISHU;
ELSE
RETURN RINT+48;
}
这样就有了一个随机出来的ascii,我们把它转换成字符,打印出来就好了,
需要长度多少就打印多少次!
欢迎各位指正,代码随后,贴出来!
作者:
江华
时间:
2013-3-11 16:36
本帖最后由 江华 于 2013-3-11 16:46 编辑
这是我写的代码:
/*
* ascii中
* 数字是从48~57,A~Z是从65~90 ,a~z是97~122,
* 从48~开始到122之间没有 (58~64)和(91~96)这12个数字
* 我们可以生产随机数,出现没有的12个数字,那就重新再生成!
* 把它们变成48+ new Random().nextInt(74) 其中 new Random().nextInt(74)不在(58~64)和(91~96)这12个数字之内
* */
import java.util.Random;
class MiMaShengCheng
{
public static void main(String[] args)
{
System.out.println("看下我们随机生成的密码是什么?");
for (int i=0;i<6;i++)
System.out.print(suiJiShu());
}
public static char suiJiShu()
{
//生成随机数
Random r=new Random();
int rint=r.nextInt(74);
if((rint > 9 && rint < 17 ) || ( rint > 42 && rint < 49))
// 不符号要求,递归调用,找到合适的结束
return suiJiShu();
else
// 符合要求,返回生成的ascii对应的字符
return (char)(rint+48);
}
}
作者:
谢辉林
时间:
2013-3-12 09:37
江华 发表于 2013-3-11 16:36
这是我写的代码:
/*
* ascii中
非常感谢 值得学习
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2