2012-12-23 237 views
0

我想要返回一個隨機數字必須在兩個數字之間,我這樣做的方式是設置一個循環來檢查它是否在這些數字之間,如果不是,重新推出。麻煩做一個while while循環

我遇到的問題是,它永遠不會擺脫我的循環,我不能解決它,這是因爲變量不會被傳遞出循環重新測試?

如果是這樣,是否需要做某種回報或休息?

代碼:

int randDamRange = 0 
byte DamRange = attack.getM_damageRange(); //In this case 75 

//Create a random number from within the attack damage range 
do 
{ 
    Random randbetween = new Random(); 

    randDamRange = randbetween.nextInt(DamRange); 
    randDamRange = 75; //Test Should breakout of loop   
} 
while ((randDamRange < DamMin) || (randDamRange < DamMax)); 
+0

除你的實際問題的答案,請注意,每次你需要一個隨機數時創建一個新的Random實例並沒有得到Random算法的好處。對於整個系列的數字最好使用一個隨機數。 –

回答

3

看看你的循環條件:

while ((randDamRange < 50) || (randDamRange < 115)); 

現在想想randDamRange被75.爲什麼你會不指望它堅持下去? 75小於115

注意,由於50小於115,你的循環條件是完全等同於:

while (randDamRange < 115); 

嫌疑你的意思是:

while (randDamRange < 50 || randDamRange > 115) 

但如果所以,這將是更容易得到一個在[0, 65]範圍內的隨機數並添加50 ...根本沒有必要循環。 (目前尚不清楚如何getM_damageRange()進入的東西。)

+1

當然,這是漫長的一天。謝謝。 – Springfox

2

更簡單的解決方案,使50和115之間的隨機數會得到0和65之間的隨機數,並添加50:

Random randbetween = new Random(); 
randDamRange = randbetween.nextInt(65); 
randDamRange += 50; 
0

在你的情況下做到這一點,最簡單的方法是:

int randomNumber = (int)(Math.random() * 76) 

的一般方法是:

int randomNumber = minimalValue + (int)(Math.random() * ((maximalValue - minimalValue) + 1))