2012-10-22 160 views
3

我必須用這些參數創建一個PRNG「程序應該使用以下算法生成1000個數字的序列:seed =(1664525 * seed + 1013904223)%4294967296對於每個新種子,打印出請記住,在進行此分割以獲得十進制數之前,您必須將長整數轉換爲雙整數!「你可以笑,如果你想,但這是我一直扔到目前爲止,Java PRNG從零開始

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的第一年。我不是要求任何人去做我的工作,這不會幫助我,而是輕輕一點。 Thanx

+1

您應該做的第一件事就是清理您發佈的代碼:將所有制表符轉換爲一致的空格數並修復縮進。其次,在'while'和'for'語句末尾刪除分號。然後,在調試器中運行該程序,並通過這種方式找出問題所在。 –

回答

1

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

0

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

  1. 重複局部變量種子int類型的
  2. 字面4294967296超出範圍。因此改爲4294967296.0(雙精度)
  3. 在while結束時刪除分號(:)併爲
  4. do while語句的語法不正確。

我覺得你做的目的,同時聲明,接受數between -2147483648 and 2147483647. 如果是這樣,你做while條件應該是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(); 
     } 
    } 
}