繁体   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