簡體   English   中英

Java Math.random

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

您可能會看到到達此處的符號的ASCII碼

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 )的結果是從0n 因此,您的結果將在A[AZ[ )之間。

暫無
暫無

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

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