2014-12-28 41 views
-1

我試圖設置一個隨機數,但不包括隨機中的某個數字。隨機數我的世界

public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { 

    Player player = (Player) sender; 

    if(commandLabel.equalsIgnoreCase("random")){ 

     Random random = new Random(); 
     int randomId = random.nextInt(300); 

     if(randomId >= 100 && randomId <= 200){ 
      player.sendMessage("" + randomId); 
     } 

     while(randomId != 124){ 
      randomId = random.nextInt(300); 
     } 
    } 
} 

我想排除隨機數124。

+0

究竟不起作用?用'while(randomId == 124)'替換'random.nextInt(300)'爲'random.nextInt(200)'和'while(randomId!= 124)'。 – Charlie

+0

如果你想要一個介於100和200之間的數字,爲什麼要從0到299之間的數字開始? 2/3的時間你不想做什麼? – hobbs

+0

我只是想生成兩個值之間的數字,例如:0和299,但我不希望隨機數爲124 – BlackDereker

回答

6

你可以得到它,像這樣:

Random r = new Random(); 

int generated = r.nextInt(299); // generate 0..299 
if(generated >= 124) { 
    generated++; // skip 124 
} 
// now you can send the number 

注意,這不涉及任何循環,而且會一直跳到124範圍內給值[0..300)

+0

這會給數字125增加一個偏差。 – Daniel

+0

如何?它不會。它不檢查== ==,它會改變整個範圍。請仔細閱讀代碼。 – Sebi

1

你」重新循環,直到數字是124.「雖然!」意味着「直到」

您也在之前發送消息做你的循環。

你真正想要的是:

public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) { 
    final Player player = (Player) sender; 

    if (commandLabel.equalsIgnoreCase("random")) { 

     final Random random = new Random(); 
     int randomId; 

     do { 
      randomId = random.nextInt(300); 
     } while (randomId == 124); 

     if (randomId >= 100 && randomId <= 200) { 
      player.sendMessage(String.valueOf(randomId)); 
     } 
    }