Java Math.random

时间:2014-09-07 11:03:47

标签: java random

我一直在通过书籍搜索Math.random的逻辑,但是我无法理解

((char)('A' + Math.random() * 27))

27是什么意思?我尝试用100替换,结果就是它生成了一些特殊字符!@#$%^& *(( 如果你能给我更多关于此的信息,我将不胜感激。 TQ

6 个答案:

答案 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[)。