我想利用循环来做这程序   我的程序如下
           
          class Rand                                  
{
  int n=1;
  int a[]=new int[4];
  int b;
  
  
     //产生随机数方法 
        Rand()                                              
    {
       //产生第一位大于0的随机数
    
       a[0]=(int)(9*Math.random()+1);
      
    
     //利用循环产生3个不同的随机数(且与第一个随机数不同
    
   //由a[1]开始循环到a[3],赋随机数
     for(int i=1;i<4;i++)
    {
     a[i]=(int)(10*Math.random()); 
     // 这里是循环判断a[i]与他们前面的每一位是否相同
      for(int j=0;j<i;j++)
      {
     //如果a[i]等于a[j]就重新赋随机值在进入这个循环判断
       while(a[i]==a[j])
       {
         j=0;
         a[i]=(int)(10*Math.random());
       }
      } 
     }
  
   //在这里每循环一次,n就会 乘以10
     for(int i=3;i>=0;i--)
     {
       b=a[i]*n+b;
       n=n*10;
     }
   }
    
    void Show()
   {
      System.out.println("随机数是 :"+b);
          
   }
 }
      
  class Guess
 {
   public static void main(String[]args)
  {
    Rand aa=new Rand();
    aa.Show(); 
  }
 }  
  我已经测试过这个程序,运行10次就大概有2次会有一个两位重复的数字        出错的数字是:9242,9596,2040……
  
  希望大家能帮我改正这个程序!谢谢!

解决方案 »

  1.   

    public static void main(String[] args) {
    String number = "";
    Random rd = new Random();
    while (number.length() != 4) {
    String rn = rd.nextInt(10) + "";
    if (number.indexOf(rn) == -1)
    number += rn;
    }
    System.out.println(number);
    }
      

  2.   


    这是我之前的程序
     
      class   Rand                                                                     

        int   n=1; 
        int   a[]=new   int[4]; 
        int   b; 
        
        
              //产生随机数方法   
                    Rand()                                                                                             
            { 
                  //产生第一位大于0的随机数 
            
                  a[0]=(int)(9*Math.random()+1); 
                
            
              //利用循环产生3个不同的随机数(且与第一个随机数不同 
            
          //由a[1]开始循环到a[3],赋随机数 
              for(int   i=1;i <4;i++) 
            { 
              a[i]=(int)(10*Math.random());   
              //   这里是循环判断a[i]与他们前面的每一位是否相同 
                for(int   j=0;j <i;j++) 
                { 
              //如果a[i]等于a[j]就重新赋随机值在进入这个循环判断 
                  while(a[i]==a[j]) 
                  { 
                    //  j=0; 
                      a[i]=(int)(10*Math.random()); 
                  } 
                }   
              } 
        
          //在这里每循环一次,n就会   乘以10 
              for(int   i=3;i> =0;i--) 
              { 
                  b=a[i]*n+b; 
                  n=n*10; 
              } 
          } 
            
            void   Show() 
          { 
                System.out.println("随机数是   :"+b); 
                        
          } 
      } 
                
        class   Guess 
      { 
          public   static   void   main(String[]args) 
        { 
            Rand   aa=new   Rand(); 
            aa.Show();   
        } 
      } 少了一个 j=0不好意思,这个程序是改好的,我忘了编译,    我运行的是我之前错误的类。
      
    犯了一个很低级的错误,呵呵。