2011-03-23 161 views
1

我期望在1500和1650之間(含)的值之間生成隨機整數。Java在1500和1650之間生成隨機值包含

我已成功生成25和55之間的隨機值(代碼如下)。然而,我遇到的問題是,如果我調整代碼以生成介於1500和1650之間的值,則結果最終會向我提供值1500,因爲生成的大部分數字都低於此值,因此我的if語句設置任何低於1500至1500

Random rand = new Random(); 

    double angle = rand.nextInt(55); 
    if(angle < 25){ 
     angle = 25; 
    } 

    double muzzlevelocity = rand.nextInt(1500) + 150; 

    if(muzzlevelocity < 1500){ 
     muzzlevelocity = 1500; 
    } 

    if(muzzlevelocity > 1650){ 
     muzzlevelocity = 1650; 
    } 

我偶爾會(雖然很少)實現它位於1500和1650(含)之間的結果。是否有另一種(更簡單/更直接)的方式可以實現我想要的結果?

實施例的輸出如下:

輸出1 3:

Random Angle: 25.0 
Random Muzzle Velocity: 1500.0 

輸出2 3:

Random Angle: 30.0 
Random Muzzle Velocity: 1573.0 

輸出3 3:

Random Angle: 43.0 
Random Muzzle Velocity: 1500.0 

謝謝。

回答

13

你已經明白了;你想要

rand.nextInt(151) + 1500 

從1500開始創建150個不同的值。注意我使用了151而不是150,因爲你想包括上限。 「if/else」完全不需要;所有的值都會在你想要的範圍內。

0

不用擔心,我已經工作了 - 我改變了所有的上述(對於muzzlevelocity)以下和它的伎倆:

double muzzlevelocity = rand.nextInt(1651 - 1500) + 1500; 

感謝。

+2

即使您自己解決了問題,您應該接受其他答案,因爲它們可以解決您的問題 – TheLQ 2011-03-23 01:18:59

4

此代碼嚴重損壞;在55中有25個機會出現 - 完全不是「隨機」的。

你想要的東西,如:

public int random(Random rnd, int min, int max) { 
    if(min>max) { throw new IllegalArgumentException("Invalid range - "+min+" > "+max); } 
    return (rnd.nextInt(max+1-min)+min); 
    } 

而且你可以使用此爲您的隨機數。