import java.util.*;public class PwdCreat { String PwdStr=""; int PwdNum; String rndStr="563150694980347315089613397024803254698512458030415028950547952"; public int rndNum() { Random rnd =new Random(System.currentTimeMillis()); return rnd.nextInt(62); } public String getPwd(int PwdNum) { int[] ramArray = new int[PwdNum]; for(int i=0;i<PwdNum;i++) { int m = rndNum(); if(i>0){ while( m==ramArray[i-1]) m=rndNum(); } ramArray[i]=m; //System.out.println("m="+m); String Str=rndStr.substring(m,m+1);//随机的在rndStr中取得某位字符 //System.out.println("Str="+Str); PwdStr=PwdStr+Str; } return PwdStr; } public static void main(String[] args) { PwdCreat pass=new PwdCreat(); System.out.print(pass.getPwd(8)); } }
其实,你应该在for循环之前new一个random,然后在for循环里面取nextInt(62),这样,不仅解决了你的问题,也提高了效率。 Random rnd =new Random(System.currentTimeMillis()); for(int i=0;i<PwdNum;i++){ int m = rnd.nextInt(62); 。
把你的Random对象变成PwdCreat的一个私有属性就没问题了
{
String PwdStr="";
int PwdNum;
String rndStr="563150694980347315089613397024803254698512458030415028950547952"; public int rndNum()
{
Random rnd =new Random(System.currentTimeMillis());
return rnd.nextInt(62);
}
public String getPwd(int PwdNum)
{
int[] ramArray = new int[PwdNum];
for(int i=0;i<PwdNum;i++)
{
int m = rndNum();
if(i>0){
while( m==ramArray[i-1])
m=rndNum();
}
ramArray[i]=m;
//System.out.println("m="+m);
String Str=rndStr.substring(m,m+1);//随机的在rndStr中取得某位字符
//System.out.println("Str="+Str);
PwdStr=PwdStr+Str;
}
return PwdStr;
}
public static void main(String[] args)
{
PwdCreat pass=new PwdCreat();
System.out.print(pass.getPwd(8));
}
}
Random rnd =new Random(System.currentTimeMillis());
for(int i=0;i<PwdNum;i++){
int m = rnd.nextInt(62);
。