[英]Java Math.random
我一直在通過書本搜索Math.random的邏輯,但是我無法理解
((char)('A' + Math.random() * 27))
27是什么意思? 我嘗試將其替換為100,結果是它會生成一些特殊字符,如!@#$%^&*((如果您能給我更多有關此信息,我將不勝感激。TQ
27比英文字母(26)中的字母數大1。
Math.random() * 27
生成一個介於0(含)和27(不含)之間的數字。
假設代碼的目的是生成一個大寫字母,那么它會有一個錯誤的錯誤:它可以產生((char)('A' + 26))
,即'['
。
數學隨機數返回0到1之間的隨機值。27是一個乘法器,使它有可能獲得0到27之間的隨機值。
形成Java文檔
public static double random()返回一個帶有正號的大於等於0.0且小於1.0的double值。 從該范圍(近似)均勻分布偽隨機地選擇返回值。 首次調用此方法時,它會創建一個新的偽隨機數生成器,就像通過表達式
new java.util.Random()此新的偽隨機數生成器此后用於對該方法的所有調用,並且在其他任何地方均不使用。 此方法已正確同步,以允許多個線程正確使用。 但是,如果許多線程需要以很高的速率生成偽隨機數,則可以減少每個線程擁有自己的偽隨機數生成器的競爭。 返回:大於或等於0.0且小於1.0的偽隨機雙精度值。另請參見:Random.nextDouble()
Math.random()
生成介於0.0到0.99之間的值
將其乘以否。 增加范圍
例如:
System.out.println(Math.random()*100);
將其乘以100將得到介於0.000 ..至99.999 ..之間的值。
類似地:
System.out.println((char)('A'+ Math.random()*27));
首先會產生一個編號。 介於0.0 to 26.99..
之間0.0 to 26.99..
然后將其添加到ASCII值“ A”中,然后將其類型轉換為char
顯示一個ASCII值等於結果的char
值。
輸出將位於AZ
和[
即具有65-91的ASCII值的字符
用100
代替27
,您會得到特殊字符,因為ASCII值的范圍現在已增加到65-165
Math.random()
返回介於0.0(含)和1.0( Math.random()
之間的結果。
Math.random() * 27
返回0.0到27.0之間的結果。
((char)('A' + Math.random() * 27))
返回((char)('A' + 0))
和((char)('A' + 26))
-在其他單詞,介於“ A”和“ Z”(0到25)或“ [”(26)之間的字符。
如其他答案所述,常數27代表隨機整數的范圍。
char是規范標准化為ASCII的編碼數字。
這意味着當您輸入代碼“ A”時,程序可以將其解釋為數字65。
因此,在ASCII表中描述了字母。 這個意思
char c = 'A' + 1;
c
值為B。
隨機函數將返回0到0.9999之間的值。
該結果乘以27將得到0到26.997之間的值...
在最終結果中,將先前結果加到65(女巫為A)值。
這意味着我們生成的數字池從65到91。
最后,我們將此數字轉換為char。
當我們進入ASCII表檢查65和92之間的數字時,我們會注意到這些數字是從'A'到'Z'和'['的字母。
可能有人選擇27常數的原因是因為他想生成隨機的大寫字母。 為什么不是27而不是26,可能是開發人員的計算錯誤。
Math.random()
返回介於0
(含)和1
(不含)之間的隨機double
值。 這意味着,當乘以n時 ,轉換為整數值(例如char
)的結果是從0
到n 。 因此,您的結果將在A
和[
( AZ
和[
)之間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.