2011-03-11 80 views
85

我想知道如何在兩個給定值之間生成一個隨機數。Java在兩個給定值之間生成隨機數

我能夠產生具有以下的隨機數:

Random r = new Random(); 

for(int i = 0; i < a.length; i++){ 
    for(int j = 0; j < a[i].length; j++){ 
     a[i][j] = r.nextInt(); 
    } 

} 

但是,我怎麼能生成0和100(含)之間的隨機數?

謝謝大家。

回答

278

您可以使用例如r.nextInt(101)

對於一個更通用的 「在數量上二者之間」 使用:

Random r = new Random(); 
int Low = 10; 
int High = 100; 
int Result = r.nextInt(High-Low) + Low; 

這給你一個隨機數在10(含)和100(獨家)

+1

謝謝你 - 我已經試過了,但它似乎並沒有工作。我使用從0到100(含)的隨機數來填充多維數組;當嘗試它時,它會以極大和極小的數字填充數組。例如,-3.76556749E8 3.0207573E8 2.033182079E9 -6.86227134E8。 – MusTheDataGuy 2011-03-11 10:19:11

+0

顯示其餘的代碼。什麼是'了'。 – Erik 2011-03-11 10:20:39

+0

謝謝,我已經設法讓這個工作現在。非常感謝! – MusTheDataGuy 2011-03-11 10:21:27

7

呃......

int Random = (int)(Math.random()*100); 

如果你需要生成一個以上的值,那麼就使用 for循環爲

for (int i = 1; i <= 10 ; i++) 
     { 
     int Random = (int)(Math.random()*100); 
     System.out.println(Random); 
     } 

如果你想指定一個更像樣的範圍,比如從10到100(都是ar在範圍E)

這樣的代碼將是:

int Random =10 + (int)(Math.random()*(91)); 
    /* int Random = (min.value) + (int)(Math.random()* (Max - Min + 1)); 
    *Where min is the smallest value You want to be the smallest number possible to  
    generate and Max is the biggest possible number to generate*/ 
+1

也許有點遲了,它始終與意見和代碼綁定樣式,但通常不會用大寫字母創建變量,因此將其命名爲「隨機」而不是「隨機」會更好。類通常以大寫字母:) – 2014-09-29 12:20:05

+0

如果max爲Integer.MAX_VALUE且min爲0,則將失敗。使用Math.round而不是將其轉換爲int來解決此問題。 – Krease 2015-04-09 18:06:00

+0

關於Java命名約定,變量名稱應以小寫字符開頭 – Jens 2017-05-19 08:14:13

1

Java沒有兩個值之間的隨機數發生器在同樣的方式,Python做。它實際上只需要一個值來生成隨機數。那麼你需要做的是給生成的數字添加一個一定的數字,這將導致數字在一個範圍內。例如:

package RandGen; 

import java.util.Random; 

public class RandGen { 


    public static Random numGen =new Random(); 

public static int RandNum(){ 
    int rand = Math.abs((100)+numGen.nextInt(100)); 

    return rand; 
} 

public static void main(String[]Args){ 
    System.out.println(RandNum()); 
} 

}

這個程序的功能完全位於6號線(帶有開始「INT蘭特......」請注意,Math.abs()只是將數轉換爲絕對值。 ,並且它被聲明爲一個int,這並不重要,第一個(100)是我加入隨機數字的數字,這意味着新的輸出數字將是隨機數字+100。numGen.nextInt()是隨機數本身的值,因爲我把(100)放在它的圓括號裏,它是1到100之間的任何數字。所以當我加上100時,它就成爲101和200之間的數字。你實際上並不生成數字介於100和200之間,則您將添加到1和100之間的數字。

1

也可以嘗試以下:

public class RandomInt { 
    public static void main(String[] args) { 

     int n1 = Integer.parseInt(args[0]); 
     int n2 = Integer.parseInt(args[1]); 
     double Random; 

     if (n1 != n2) 
     { 
      if (n1 > n2) 
      { 
       Random = n2 + (Math.random() * (n1 - n2)); 
       System.out.println("Your random number is: " + Random); 
      } 
      else 
      { 
       Random = n1 + (Math.random() * (n2 - n1)); 
       System.out.println("Your random number is: " +Random); 
      } 
     } else { 
      System.out.println("Please provide valid Range " +n1+ " " +n2+ " are equal numbers."); 
     }      
    } 
} 
+3

位詳細且笨拙。您不需要重複該代碼,只需決定是否首先有n1或n2的值。 – itsbruce 2012-10-30 18:44:41

+0

關於Java命名約定,變量名應該以小寫字符開頭 – Jens 2017-05-19 08:14:37

33

假設上層是上限和更低的下限,那麼你可以做一個隨機數R,這兩個界限之間有:

int r = (int) (Math.random() * (upper - lower)) + lower; 
+0

這是排除在上面 – Rizon 2016-11-15 21:52:42

+1

int r =(Math.random()*(upper-lower))+ lower;它將包容性較低。這可能會有所幫助。 – 2016-11-22 18:59:06

4

這樣,

Random random = new Random(); 
int randomNumber = random.nextInt(upperBound - lowerBound) + lowerBound; 
相關問題