這裏是我的代碼看起來像剝了下來,儘可能:的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'的類型是什麼?你可以把它歸結爲一個獨立的例子嗎?您已經忽略了足夠的重要信息,任何人都很難提供幫助,問題可能會被解決。 –
對不起,我只是儘可能地編輯它。你在這個問題中看到的所有代碼都在沒有任何其他外部代碼的主方法內部運行。 –