Random 只要初始化一次就可以了,
把Random rnd ;定义为成员变量
把Random rnd =new Random();
改为if(rnd ==  null) rnd =new Random();

解决方案 »

  1.   

    最好是static Random rnd = new Random()
      

  2.   

    具体原因不明白,可能是每个Random对象被初始化后取的第一个next有什么规律,如与时间有关之类的
    把你的Random对象变成PwdCreat的一个私有属性就没问题了
      

  3.   

    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));
    }
    }
      

  4.   

    其实,你应该在for循环之前new一个random,然后在for循环里面取nextInt(62),这样,不仅解决了你的问题,也提高了效率。
    Random rnd =new Random(System.currentTimeMillis());
    for(int i=0;i<PwdNum;i++){
        int m = rnd.nextInt(62);