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

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

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

问题在哪里?请教!
展开
 我来答
百度网友832bd6a
2013-04-10 · TA获得超过1180个赞
知道小有建树答主
回答量:422
采纳率:0%
帮助的人:405万
展开全部
1. 'a' 不是一个String 类型, 而是一个基本类型 char。

2. 根据java 运算规则。 运算符俩边的基本数据类型不一致的话,短类型会自动转换为较长的数据类型,再进行计算

3. 因为 int > char 类型。 因此 上面的计算,会被转化成
char c = (char)(Math.random() * 26 + (int)('a') );

4. 因此 实际的结果为 char c = (char)(Math.random() * 26 + 97 );
>> char c = (char)( [0 - 26] + 97 );

因此实际结果是。 小写 a ~ z

百度知道团 【程序猿和程旭媛】 做出解答。

请采纳为答案
437384801
2013-04-10 · TA获得超过1867个赞
知道小有建树答主
回答量:1299
采纳率:0%
帮助的人:509万
展开全部
无语这里的a不是'a'.应该是它的ascii码把,这样可以了转化为char
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-04-11
展开全部
‘a’不是字符串哦,“a”这个才是字符串!
呵呵
char c = (char)(Math.random() * 26 + 'a');
这里面其实进行了一次系统默认的数据类型转换和一个强制类型数据类型转换
默认的数据类型转换也称为 隐式的数据类型转换
当然了 强制。。 称为 显式
首先 Math.random() * 26 + 'a' 这里面就进行了 隐式转换
Math.random() * 26 的结果 是0-26的double 那么就是一个double+char 的表达式 这个时候根据规则会从小数据类型默认的转换为大数据类型 然后进行计算
也就是说 0-26的一个double + 97.000000 那么它的结果当然也是一个double型
最后强制的将这个double型转为char型

总结: 小-大 隐式

大-小 显式

另外 显式的转换会丢失数据! 比如 double d=4.9; int i =(int)d;
到这里 你认识 i是多少?
想一下!

是4! 呵呵

字母对应以外的数字就会得到字母以外的字符
比如32 应该就是回车了
37 38 39 40 对应的← ↑ → ↓了

不过255以上得到的字符应该得到个垃圾值 因为char只能存放0-255的数据
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-04-11
展开全部
是这样的。 定义的是char型,但是括号里又有数字,那么系统就会自动将该数字转换为对应的ASCII 值
a+1 对应的就是b了,26随机数刚好就是a-z 26个字幕
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
time遥远的自己
2013-04-10
知道答主
回答量:13
采纳率:0%
帮助的人:4.3万
展开全部
'a'表示字符,double+字符结果为double类型,再用char强制转换的话能生产a~z之间的字母
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-04-11
展开全部
‘a’他不是字符串,留Q我们交流
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式