lyjlyj 发表于 2018-11-2 11:11:23

生成随机的字母

char ch = (char)( Math.random() * 26 + 'A' );       
               
ch += (int)( Math.random() * 2 ) * ( 'a' - 'A' );
这两句能生成随机的字母,看不懂,求解

风扫地 发表于 2018-11-2 11:39:29

第一个:
Math.random() 的返回值是[0,1)的随机数,*26后其范围为[0~26) 左闭右开区间
'B'的ASCII码值比'A'的ASCII的值大1,
'Z'的ASCII码值比'A'的ASCII的值大25.

'A'+[0,26) = ['A','Z'+1)
取不到'Z'+1,上限值只能取到'Z'
所以char ch = (char)( Math.random() * 26 + 'A' );   
执行完毕后
ch 可以取到 'A'~'Z'



第二个略,需要查一下ASCII码表。

_ULTIMATE_CODER 发表于 2018-11-2 11:39:30

由于ascii码中,大写字母排在小写字母前面,中间还隔了一些其他字符
这两行代码是先生成一个大写字符,再随机判断生成该字母的大写形式或者小写形式,Math.random()*2无非就是0或1,0就是大写,1就是小写(就是加上了中间隔的字符的数量,得到对应小写字母的ascii码)

yechuang 发表于 2018-12-15 17:51:45

两张图解决你的困惑
页: [1]
查看完整版本: 生成随机的字母