这里是我的代码看起来像剥了下来,尽可能:的Java奇怪的浮动行为
float delay = (float)5000;
long startTime = System.nanoTime();
int elapsed = 0;
for (int i = 0; i < 20; i++) {
elapsed = (int) ((System.nanoTime() - startTime)/1000000);
// System.out.println("Elapsed: " + elapsed);
float range = delay * 0.4f;
float randomNum = (float)(Math.random() * range - (delay * 0.2f));
if (elapsed > (delay + randomNum)) {
System.out.println("Random Num: " + randomNum);
startTime = System.nanoTime();
} else {
i--;
continue;
}
}
正如你可以看到我的循环20次,5秒钟后打印出一个随机数(5000毫秒)。这是输出的样子:
正如你可以看到,所有的输出都非常接近-1000。我试图产生一个从-1000到1000的随机浮动,但他们似乎都在-1000左右。所以,我检查,以确保实际的随机数发生器工作时,使用此代码:
float delay = (float)5000;
long startTime = System.nanoTime();
int elapsed = 0;
for (int i = 0; i < 20; i++) {
elapsed = (int) ((System.nanoTime() - startTime)/1000000);
// System.out.println("Elapsed: " + elapsed);
float range = delay * 0.4f;
float randomNum = (float)(Math.random() * range - (delay * 0.2f));
System.out.println("Random Num: " + randomNum);
startTime = System.nanoTime();
}
基本上我拿了过去的方程和刚刚打印的随机数,而不if语句。这是我得到的输出:
在这个例子中,我很随意输出,完全像你期望的那样。但是,如果像第一组代码中一样添加过去后,输出将回到-999,并带有一些随机小数位。
更有意思的是,如果你把打印语句正上方,如果randomNum
后声明和权限被分配一个值,你会得到这些输出:再次
,数字是随机的。由于某些原因,第一个示例代码中放入了部分代码,randomNum
变量在调用if语句之后立即发生变化。为什么会发生?
'range'的类型是什么?你可以把它归结为一个独立的例子吗?您已经忽略了足够的重要信息,任何人都很难提供帮助,问题可能会被解决。 –
对不起,我只是尽可能地编辑它。你在这个问题中看到的所有代码都在没有任何其他外部代码的主方法内部运行。 –