我一直在通过书籍搜索Math.random的逻辑,但是我无法理解
((char)('A' + Math.random() * 27))
27是什么意思?我尝试用100替换,结果就是它生成了一些特殊字符!@#$%^& *(( 如果你能给我更多关于此的信息,我将不胜感激。 TQ
答案 0 :(得分:4)
27比英文字母(26)中的字母数大一个。
Math.random() * 27
生成介于0(含)和27(独占)之间的数字。
假设代码的意图是生成一个大写字母,它有一个一个一个错误:它可以产生((char)('A' + 26))
,即'['
。
答案 1 :(得分:0)
Math random返回0到1之间的随机值.27是一个乘数,可以得到0到27之间的随机值。
形成java doc
public static double random()返回带有正数的double值 符号,大于或等于0.0且小于1.0。返回值 伪随机选择(近似)均匀分布 从那个范围。首次调用此方法时,它会创建一个 单个新的伪随机数生成器,就好像是由 表达
new java.util.Random()使用这个新的伪随机数生成器 此后对所有对此方法的调用都没有在其他地方使用。 此方法已正确同步,以允许正确使用超过 一个线程。但是,如果许多线程需要生成伪随机数 数字速度很快,可能会减少每个线程的争用 拥有自己的伪随机数生成器。返回:伪随机数 double大于或等于0.0且小于1.0。参见 也:Random.nextDouble()
答案 2 :(得分:0)
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..
之间,然后将其添加到ASCII值为'A',然后将其类型转换为char
,显示一个char
值,其值等于结果。
输出将来自A-Z
和[
,即ASCII值为65-91的字符
将27
替换为100
后,您会获得特殊字符,因为ASCII值的范围现已增加到65-165
您可能会看到要获得的符号的ASCII代码here.
答案 3 :(得分:0)
Math.random()
返回0.0(含)和1.0(不包含)之间的结果。
Math.random() * 27
返回介于0.0和27.0之间的结果。
((char)('A' + Math.random() * 27))
返回((char)('A' + 0))
和((char)('A' + 26))
之间的结果 - 换句话说,“A”和“Z”(0到25)或“[”(26)之间的字符
答案 4 :(得分:0)
正如其他答案所述,常数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,它可能是开发人员的计算错误。
答案 5 :(得分:0)
Math.random()
会在double
(包含)和0
之间返回一个随机1
值(不包括在内)。这意味着,当乘以 n 时,结果转换为整数值(例如char
),从0
到 n 。因此,您的结果将介于A
和[
之间(A-Z
和[
)。