我的线性同余发生器有一个问题。我有两个模数。如果我更换或删除它们中的任何一个,我不会得到任何输出,除了最后启动的计数器,但如果没有使用计数器处理的输出,它就没用了。
我需要应用程序输出0到9范围内的数字,然后在结尾处输出数字的分布。这是我的代码:
public static void main(String[] args) {
int fact;
int constant;
int modulus;
int seed;
Scanner scan = new Scanner(System.in);
System.out.println("Input fact: ");
fact = scan.nextInt();
System.out.println("Input constant: ");
constant = scan.nextInt();
System.out.println("Input modulus: ");
modulus = scan.nextInt();
System.out.println("Input seed: ");
seed = scan.nextInt();
int[] arrayBox;
arrayBox = new int[10];
for (int i = 0; i < 10; i++) {
seed = (seed * fact + constant) % modulus; // First modulus
System.out.println(seed);
arrayBox[seed % 10] = arrayBox[seed % 10] + 1; // Second modulus
}
for (int i = 0; i < 10; i++) {
System.out.print(+(100 * arrayBox[i] / 10) + "% ");
}
}
任何人都可以帮我找到第二个模数的方法,仍然可以让我的输出和计数器在我想要的范围内工作(0到9)吗?
答案 0 :(得分:1)
我在你想要做的事情上遇到了一些麻烦,但我认为你想要的是什么,最后:
System.out.println(i + ":\t" + (100*arrayBox[i]/10) + "%");
请注意,此程序未将实际seed
值保存在任何位置,因此您将无法查看它们。
以下是此程序的示例运行,其中包含一些合理的输入参数值:
Input fact:
257
Input constant:
31
Input modulus:
64
Input seed:
89
56
23
54
21
52
19
50
17
48
15
0: 10%
1: 10%
2: 10%
3: 10%
4: 10%
5: 10%
6: 10%
7: 10%
8: 10%
9: 10%