【发布时间】:2019-03-09 12:45:29
【问题描述】:
我试图在不使用任何 Random() 函数的情况下生成无意义的单词。我发现我可以使用当前时钟或鼠标坐标。我选择使用当前时钟。这是我写的代码。
private final char[] charray = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
private char getRandomCharacter(){
return charray[random(charray.length)];
}
private int random(int value){
value =(int) System.nanoTime()% 52;
return value;
}
protected Randomizer(){
boolean running = true;
int count = 0;
int max = 5;
while(running){
StringBuilder sb = new StringBuilder();
int size = random(25) + random(25);
for (int i = 0; i < size; i++) {
sb.append(getRandomCharacter());
}
System.out.println("Random Line : " + sb.toString());
if (count++ == max) {
running = false;
System.out.println("All of them are random.");
}
}
}
public static void main(String[] args) {
new Randomizer();
}
我期待这样的输出:
axdlMkjiIfjcmqQopv 等..
但我得到这样的东西:
ZNNrrrUUUUxxxxbbbhhhLLLLoooRRRRRvvvYYYYBBBBfffI 或 JmmmPPKKKKnnnnRRBeeHHHHllllllOOOOorrrVVVVV
为什么有太多的连续性。 nanoTime 是否太慢了?我想不通,也找不到任何关于如何随机使用当前时钟的来源。
【问题讨论】:
-
这是一道作业题吗? (如果是这样就足够了,到目前为止,您已经表现出不错的努力。)如果不是为了家庭作业,那么我强烈建议您坚持使用内置的 Java
Random类。伪随机数生成很难正确(即使是 Java 中最初的随机方法也没有做得很好),所以如果你试图重新发明这个轮子,你会在折磨自己。 -
为什么你将
int value传递给random 只是为了分配新值并返回?输入 arg 的意义何在? -
另外,我不希望 System.nanoTime() % 52 是均匀分布的。这基本上归结为每个 CPU 的jiffy 不同,因此并非每个 CPU 都具有相同的粒度。时间精度。
-
可能与平台有关。在 Mac OS 上,我得到例如“OaWoVbYVNHxqeWMICACBzxlhYPHAtjkYPKveTWUWUXRTrmZVNDqAttjgaWMDAzWGEvpgcYLjSPHIENAs”。您使用什么操作系统?
-
为什么要避免使用内置的
Random类?
标签: java random random-seed nanotime current-time