JAVA—利用Math.random随机产生字母的问题

刚开始学JAVA。
看到一本书中有这样一段:
char c = (char)(Math.random() * 26 + 'a');
说可以随机产生字母。

不太明白啊
我知道Math.random() * 26 是产生一个[0,26)之间的double值,然后与‘a’进行字符串连接,根据运算符过载原理“如果将一个数值“加”到一个字串身上,会自动将那个数值(int,float等等)转换成字串,再进行连接。”
不是应该生成一个类似1.5a这样的字符串吗?
为什么是生成a~z之间的字母呢?

问题在哪里?请教!
谢谢各位。
明白了‘a’是char,不是string。
但是又有新的问题:
我查到说1—127兼容了ASCII码。是不是说如果如果1—127之间的数值强制转换为char时,会得到ASCII码对应的字母或其他?
那如果1~127之外的数值强制转换为char类型,会得到什么呢?

第1个回答  2018-02-01
char c = (char)(Math.random() * 26 + 'a');
要提醒下,这段语句本身有错
Math.random()产生的是一个[0,1]闭区间的double数,因此0,与1都有可能取到,而上面这段代码中的“Math.random() * 26”产生的是一个[0,26]闭区间的整数,因此当取到26的时候,c = 26+'a' 值为'{'而不是字母。
可能是楼主看错了,也可能书本身有问题,建议仔细再看看
相似回答