3

我必须使用这些参数创建一个 PRNG “程序应该使用以下算法生成 1000 个数字的序列:种子 = (1664525 * 种子 + 1013904223) % 4294967296 对于每个新种子,打印出种子 / 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 项目中的第一年。我不是要求任何人做我的工作,这对我没有帮助,但轻推会。谢谢

4

2 回答 2

1

我能看到的第一个问题是紧跟在while和之后的分号for。这些几乎肯定不是你想要的。

于 2012-10-22T02:06:35.770 回答
0

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

  1. 重复的局部变量种子
  2. int 类型的文字 4294967296 超出范围。所以改变 4294967296.0 (double)
  3. 删除 while 和 for 末尾的分号 (:)
  4. do while 语句的语法不正确。

我认为你的 do while 语句的目的是接受 numberbetween -2147483648 and 2147483647. 如果是这样,你的 do 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();
        }
    }
}
于 2012-10-22T04:41:20.327 回答