首頁  >  文章  >  Java  >  Java如何產生隨機數

Java如何產生隨機數

藏色散人
藏色散人原創
2019-01-17 10:13:4836433瀏覽

Java產生隨機數的方法:先在程式類別開始之前放入import語句;然後建立一個Random物件;最後從某個範圍中挑選隨機數即可。

Java如何產生隨機數

本文操作環境:Windows7系統、Dell G3電腦、Java8.0版。

產生一系列隨機數是不時出現的常見任務之一。在Java中,只需使用java.util.Random類別即可實作。

與使用任何API 類別一樣,第一步是在程式類別開始之前放入import語句:

 import java.util.Random;

接下來,建立一個Random物件:

 Random rand = new Random();

Random物件為您提供了一個簡單的隨機數產生器。物件的方法提供了選擇隨機數的能力。例如,nextInt()和nextLong()方法將分別傳回int和long資料類型的值(負數和正數)範圍內的數字:

 Random rand = new Random();
for (int j=0;j < 5;j++)
{
  System.out.printf("%12d ",rand.nextInt());
  System.out.print(rand.nextLong());
  System.out.println();
}

傳回的數字將隨機選擇int和long值:

-1531072189 -1273932119090680678
1849305478  6088686658983485101
1043154343  6461973185931677018
1457591513  3914920476055359941
-1128970433 -7917790146686928828

從某個範圍中挑選隨機數字

通常,要產生的隨機數字需要來自某個範圍(例如,包括1到40之間)。為此,nextInt()方法也可以接受int參數。它表示數字範圍的上限。但是,上限數字不包括在可以選擇的數字之一中。這可能聽起來令人困惑,但nextInt()方法從零開始工作。例如:

 Random rand = new Random();
rand.nextInt(40);

只會從0到39中選出一個隨機數。要從以1開頭的範圍中進行選擇,只需將1新增到nextInt()方法的結果中即可。例如,要選擇1到40之間的數字,請在結果中加上一個:

 Random rand = new Random();
int pickedNumber = rand.nextInt(40) + 1;

如果範圍從一個更高的數字開始,您將需要:

減去上限數字的起始編號,再加一。

將起始編號加入nextInt()方法的結果。

例如,要從5到35中選擇一個數字,上限數字將為35-5 1 = 31,並且需要將5加到結果中:

 Random rand = new Random();
int pickedNumber = rand.nextInt(31) + 5;

隨機類別是多麼隨機?

我應該指出,Random類別以決定的方式產生隨機數。產生隨機性的演算法是基於稱為種子的數字。如果種子數已知,那麼可以計算出將從演算法產生的數字。為了證明這一點,我將使用Neil Armstrong首次踏上月球之日的數字作為我的種子數(1969年7月20日):

 import java.util.Random;
public class RandomTest {;
  public static void main(String[] args) {
    Random rand = new Random(20071969);
    for (int j = 0; j

無論誰運行此代碼,生成的“隨機”數字序列將是:

 3 0 3 0 7 9 8 2 2 5

預設情況下,使用的種子編號由:

 Random rand = new Random();

是自1970年1月1日以來的當前時間(以毫秒為單位)。通常,這將為大多數目的產生足夠隨機的數字。但是,請注意,在同一毫秒內建立的兩個隨機數產生器將產生相同的隨機數。

對任何必須具有安全隨機數產生器的應用程式(例如,賭博程式)使用Random類別時也要小心。可以根據應用程式運行的時間猜測種子數。通常,對於隨機數絕對關鍵的應用程序,最好找到Random物件的替代方案。對於大多數只需要某個隨機元素的應用程式(例如,棋盤遊戲的骰子),它可以正常工作。

以上是Java如何產生隨機數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn