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之间的字母呢?
问题在哪里?请教! 展开
看到一本书中有这样一段:
char c = (char)(Math.random() * 26 + 'a');
说可以随机产生字母。
不太明白啊
我知道Math.random() * 26 是产生一个[0,26)之间的double值,然后与‘a’进行字符串连接,根据运算符过载原理“如果将一个数值“加”到一个字串身上,会自动将那个数值(int,float等等)转换成字串,再进行连接。”
不是应该生成一个类似1.5a这样的字符串吗?
为什么是生成a~z之间的字母呢?
问题在哪里?请教! 展开
7个回答
展开全部
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
百度知道团 【程序猿和程旭媛】 做出解答。
请采纳为答案
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
百度知道团 【程序猿和程旭媛】 做出解答。
请采纳为答案
展开全部
无语这里的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的数据
呵呵
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个字幕
a+1 对应的就是b了,26随机数刚好就是a-z 26个字幕
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
'a'表示字符,double+字符结果为double类型,再用char强制转换的话能生产a~z之间的字母
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-04-11
展开全部
‘a’他不是字符串,留Q我们交流
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询