A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 庄星睿 中级黑马   /  2012-6-9 16:48  /  2865 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

网页上临时产生随机验证字符串问题:
  1. public class AutoConversion
  2. {
  3. public static void main(String[] args)
  4. {
  5. String result="";
  6. for (int i=0;i<4;i++)
  7. {
  8. //int intVal=(int)(Math.random()*26+'A');   //这么写程序ok没问题
  9. int intVal=(int)Math.random()*26+'A';  //这么写,应该也是正确的啊,将double类型强转成int,在'A'相加,会提升到int类型
  10. result=result+(char)intVal;
  11. }
  12. System.out.println(result);

  13. }
  14. }
复制代码
怎么第二种写法输出结果每次都是AAAA

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
(int)Math.random()*26+'A'; 错了!
应该为math.random()刚生成小数,你就强转会变成0;也就是在*26还是0;

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
()的运算优先级别高于算术运算符,(int)先把Math.random()产生的数字强转为int型,Math.random()随机参数的数值范围是大于或等于 0.0 但小于 1.0 ,所以强转后都为0,当然结果都是‘A’了,只要把(Math.random()*26)这样括起来就可以了,你懂的

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
本帖最后由 庄星睿 于 2012-6-9 17:31 编辑
潘东升 发表于 2012-6-9 17:15
()的运算优先级别高于算术运算符,(int)先把Math.random()产生的数字强转为int型,Math.random()随机参数 ...


原来是优先级的问题啊 顺便问一下,怎么把帖子的标题状态改成《已解决》啊,貌似编辑里边不能修改啊
回复 使用道具 举报
你可以查询一下api (帮助文档) 在api 中写道 Math.random() 函数返回的值 大于等于0.0小于1.0 如果写成(int)Math.random()*26. 这样的话这个表达式的取值就是0了。所以最终结过是AAAA。然而int intVal=(int)(Math.random()*26+'A');   或int intVal=(int)(Math.random()*26)+'A';   都是正确的。
回复 使用道具 举报
还可以这么来。
  1.         public static void main(String[] args) {
  2.                 char[] arr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789".toCharArray();
  3.                 Random rand = new Random();
  4.                 StringBuilder data = new StringBuilder("");
  5.                 for(int i=0;i<4;i++){
  6.                         data.append(arr[rand.nextInt(arr.length)]);
  7.                 }
  8.                 System.out.println(data.toString());
  9.         }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马