X(n+1) = (a * X(n) + c) mod mModulus=231-1=int.MaxValue Multiplier=75=16807 C=0 当显示过231-2个数之后,才可能重复。 动手动脑: 编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数。
public class RandomnNumberGenerator {
private static final long MODULUS = (long) Integer.MAX_VALUE;
private static final long MULTIPLIER = 16807;
private static final long CONSTANT = 0;
public static long[] generateRandomNumbers(int count) {
long[] randomNumbers = new long[count];
long seed = 1;
for (int i = 0; i < count; i++) {
seed = (MULTIPLIER * seed + CONSTANT) % MODULUS;
randomNumbers[i] = seed;//限制在1000以内(randomNumbers[i] = seed % 1000;)
}
return randomNumbers;
}
public static void main(String[] args) {
int count = 1000;
long[] randomNumbers = generateRandomNumbers(count);
// 输出生成的随机数
for (long number : randomNumbers) {
System.out.println(number);
}
}
}
这样的随机数都很大,在源代码中我有注释如何修改。
观察观察下行代码,有什么特殊的地方?
public class MethodOverload { public static void main(String[] args) { System.out.println("The square of integer 7 is " + square(7)); System.out.println("\nThe square of double 7.5 is " + square(7.5)); } public static int square(int x) { return x * x; } public static double square(double y) { return y * y; } }
定义了两个名为 square
的方法,一个接受一个整数参数,另一个接受一个双精度浮点数参数。这两个方法的名称相同,但参数类型不同。