簡體   English   中英

Java PRNG從頭開始

[英]Java PRNG from scratch

我必須使用以下參數創建PRNG“程序應使用以下算法生成1000個數字的序列:seed =(1664525 * seed + 1013904223)%4294967296對於每個新種子,打印出seed / 4294967296的十進制值。請記住,在進行此除法之前,您必須將長整數轉換為雙精度才能得到十進制數!“ 如果你願意,你可以笑,但這是我到目前為止所拋出的,

  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程序的第一年。 我不是要求任何人做我的工作,這不會幫助我,但是推動會。 感謝名單

我能看到的第一個問題是在whilefor之后的分號。 那幾乎肯定不是你想要的。

您的程序有編譯時錯誤,首先要糾正它們。

  1. 重復的局部變量種子
  2. int類型的文字4294967296超出范圍。 所以改變4294967296.0(雙)
  3. 在while和for結束時刪除分號(:)
  4. do while語句的語法不正確。

我認為你的while語句的目的是接受between -2147483648 and 2147483647.數字between -2147483648 and 2147483647.如果是這樣,你的do條件應該是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();
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM