Java PRNG从头开始

时间:2012-10-22 02:05:05

标签: java algorithm

我必须使用以下参数创建PRNG“程序应使用以下算法生成1000个数字的序列:seed =(1664525 * seed + 1013904223)%4294967296对于每个新种子,打印出种子的十进制值/ 4294967296。请记住,在进行此除法之前,您必须将long转换为双精度才能获得十进制数!“如果你愿意,你可以笑,但这是我到目前为止所抛出的,

  import java.util.Scanner;  
  public class Random 
  {     
     public static void main( String args[] ) 
     {      
         Scanner input = new Scanner( System.in );
     long seed ;            
         double seeded ;            

         do             
         {  
             System.out.printf("Enter a Number between -2147483648 and 2147483647") ;        long num = input.nextLong() ;                  
             seed = num ;               

             while ( seed >= -2147483648 && seed <= 2147483647) ;   
     {                  
                    for ( long seed = 0 ; seed < 1000 ; seed ++ ) ; 
            {                   
                          seed = (1664525 * seed + 1013904223) % 4294967296) ;
              seeded = seed ;
                    }
                        System.out.printf(" %f", seeded ) ; 
                                }           }   }     } 

这是我在java程序中的第一年。我不是要求任何人做我的工作,这不会帮助我,但是推动会。感谢名单

2 个答案:

答案 0 :(得分:1)

我能看到的第一个问题是whilefor之后的分号。那几乎肯定不是你想要的。

答案 1 :(得分:0)

您的程序有编译时错误,首先要纠正它们。

  1. 复制局部变量种子
  2. int类型的文字4294967296超出范围。所以改变4294967296.0(双)
  3. 在while和
  4. 结束时删除分号(:)
  5. do while语句的语法不正确。
  6. 我认为你做while语句的目的是接受号码between -2147483648 and 2147483647. 如果是这样,那么您的条件应为seed <= -2147483648 && seed >= 2147483647

    我修复了你的程序。现在可以运行了。检查它是否符合您的要求。

    import java.util.Scanner;
    
    public class Test1 {
        public static void main( String args[] ) 
        {      
            Scanner input = new Scanner( System.in );
            long seed ;            
            double seeded= 0.0 ;   
            do             
            {  
                System.out.printf("Enter a Number between -2147483648 and 2147483647") ;        
                long num = input.nextLong() ;
                seed = num ;
            }while ( seed <= -2147483648 && seed >= 2147483647);
    
            for (seed = 0; seed < 1000; seed ++)
            {                   
                seeded = (long) ((1664525 * seed + 1013904223) % 4294967296.0) ;
                System.out.printf(seed + ": %f", seeded ) ;
                System.out.println();
            }
        }
    }