簡體   English   中英

如何生成一個隨機數?

[英]How to generate a Random number?

在我的android應用中,我需要生成隨機數,

我的應用程序將在局域網中的許多android設備上運行,並使用隨機數相互通信,我想生成這樣一個隨機且唯一的數字,該數字在局域網中的任何應用程序中都不應相同。

每當任何用戶在其設備和整個LAN中生成它時,它都應該是唯一的。

任何想法,我將不勝感激???

給出了問題注釋中的澄清后,我要做的是:建立一個(確定性)方案,以32位整數交換位。 交換任意數量。 將此稱為“加擾器”。

然后只計算整數; 每個人都叫“加擾者”。

由於交換方案的確定性,唯一性得到保證,將是快速的,但在冷凍方面不是安全的。 但是請注意,通常這將具有較差的統計隨機性,因此,當需要均勻分布的隨機數(例如蒙特卡洛)時,切勿使用它。 但我認為它應該滿足您的要求。

我對Android不熟悉。 但是,您的問題似乎可以通過UUID或通用唯一標識符解決。 一個快速的谷歌產生這個頁面

特別是,您正在尋找randomUUID()方法,該方法根據RFC 4122生成變體2,版本4(隨機生成的數字)UUID。

這是生成隨機數的方法:

Random r = new Random();
int random = r.nextInt(100); // returns a value between 0 (incl) and 100 (excl)

Random r = new Random();
int random = r.nextInt(100) + 20; // returns a value between 20 (incl) and 120 (excl)

關於數字應該唯一的問題,您可以以某種方式保存每個生成的數字 然后,在繪制新的隨機數時,如果已經生成了新的隨機數,請檢查保存的數字。 如果是這樣,請重畫。

Java隨機文檔: http : //docs.oracle.com/javase/6/docs/api/java/util/Random.html

我實際上發現您的要求是矛盾的。 有效的隨機序列將不會生成唯一值,否則將不是隨機的。 我的意思是,您根本不需要任何隨機的東西,只需要數字是唯一的即可。

要為每個網絡節點生成唯一的編號非常容易,將機器的ip或mac地址與時間相結合。 要獲取時間,只需執行System.currentTimeMillis(); 要獲取您的IP地址,請使用此處的示例, 以獲取Java中的mac地址 將這兩個數字結合起來將為您帶來獨特性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM