2013-10-29 57 views
0

我很新的Java和我停留在這一點,我使用的公式:創建一個範圍內的隨機數

min + (int)(Math.random()*(max-min+1)) 

,我已經寫在指定的隨機整數變量x聲明以下範圍

  1. 1 < x <= 8
    1爲分鐘,而8是最大

    我是正確,這將是1 + (int)(Math.random()*(8-1+1))

  2. -5 < x <= 3
    3爲分鐘和-5是最大

    ,這將是3 + (int)(Math.radom()*(-5-3+1))

任何幫助將不勝感激。

+1

你有什麼企圖? – raffian

+0

你有沒有試過用你寫的東西來運行你的代碼? [Math.random](http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html#random())給你一個介於0和1之間的隨機數,其餘的應該是easy – zencv

+0

SO的搜索揭示了這是第一次打擊:http://stackoverflow.com/a/363692/791406 – raffian

回答

3

您想要一個公式取[0..1)範圍內的實數,並返回一個範圍爲[1..8]的整數。

  • random()挑選一個實數它的範圍[0..1)
  • ,你乘以8呢,
  • 您在範圍[0.0 .. 8.0)得到的值。
  • 然後你再因爲轉換爲(int)回合使用「地板」階躍函數轉換爲(int),你有一個整數範圍內[0 .. 7]
  • 添加一個。
0

使用以下代碼。它將生成介於0和最大值之間的nos。

Random generator = new Random(); //Creates a new random number generator 
    for(int i=0; i<100; i++){ 
     /** 
     *Returns a pseudorandom, uniformly distributed int value 
     * between 0 (inclusive) and the specified value (exclusive), drawn from 
     * this random number generator's sequence 
     */ 
     System.out.println(generator.nextInt(100)); 
    } 
0
  1. 獲取與範圍分鐘隨機值,最大],這是問題的相同。

如果使用JDK 1.7版本,那麼你就可以使用一行代碼來實現此功能:

ThreadLocalRandom.current()。nextInt(min,max)+1

如果JDK版本低於1.7,我們可以使用以下方式實現它。

Random random = new Random();

random.nextInt(max - min)+ min +1;

2。獲取與範圍[分鐘隨機值,最大值

使用, ThreadLocalRandom.current()。nextInt(最小,最大)

random.nextInt(最大 - min)+ min;

0

Math.random()給出了0和1之間的乘積。乘以範圍,範圍的大小,而不是絕對值。如果你想1-10是9,如果你想0-10這是10,如果你想要5-7這是2等。

然後加或減從0到起始值。

如果你想0-9,那麼你就大功告成了(你應該在上一步中都乘以9)

如果你想1-10再加入1

如果你想-5〜 5然後減去5

如果你想要5-7然後做(Math.random()* 2)+5;