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