[英]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.