一.设计思想
1.公式中的各项数值,其中取得mod尽可能大
2.输入要进行计算的数值长度
3.输入一个种子
4.校验数值
5.调用函数,用一个变量来存储之前产生的随机数,用另一个来存储现在的随机数,循环num次
6.输出结果
二.程序流程图
三.源程序代码
1 package class4; 2 3 import java.util.Scanner; 4 5 public class RandomTest { 6 7 public static void main(String[] args) 8 { 9 Scanner in = new Scanner(System.in); 10 11 //显示公式 12 System.out.println("****************************************"); 13 System.out.println(" 利用公式:Xn+1 = (a*Xn+c)%m,得到随机数! "); 14 System.out.println("****************************************"); 15 16 //对各项系数赋值 17 int a = 10; 18 int c = 0; 19 int m = (int) ((Math.pow(2,27)-1)); 20 21 //对公式的数值进行输入 22 System.out.print("请输入要产生随机数的个数:"); 23 int num = in.nextInt(); 24 25 System.out.print("请输入要产生随机数的初始值:"); 26 int value = in.nextInt(); 27 28 //校验数值 29 if(num<0||value<0) 30 { 31 System.out.print("输入错误,不能输入负值!"); 32 System.exit(1); 33 } 34 35 //调用函数,产生并输出随机数 36 generatingRandomNumbers(a,c,m,num,value); 37 38 in.close(); 39 40 } 41 42 //用于产生随机数的函数 43 private static void generatingRandomNumbers(int a,int c,int m,int num,int value) 44 { 45 int thePrevious = value; //定义此变量用来记录上一个随机数,方便公式计算 46 int random; //产生的随机数 47 int[] test = new int[num]; //定义一个数组,用来存贮产生的随机数,方便测验 48 int record = 0; //用来记录重复了多少次 49 50 for(int i = 0;i<num;i++) 51 { 52 random = (a*thePrevious+c)%m; 53 test[i] = random; 54 System.out.println("第"+(i+1)+"个随机数是: "+random); 55 thePrevious = random; 56 } 57 58 //测验是否重复(不能判断有多少个) 59 for(int i = 0;i<num;i++) 60 { 61 for(int j = (i+1);j<num;j++) 62 { 63 if(test[i]==test[j]) 64 { 65 record++; 66 } 67 } 68 } 69 if(record == 0) 70 System.out.println("没重复啦!"); 71 else 72 System.out.println("重复"+record+"个啦!"); 73 } 74 75 76 77 78 }
四.结果截图