黑马程序员技术交流社区

标题: 产生随机字符串问题 [打印本页]

作者: 庄星睿    时间: 2012-6-9 16:48
标题: 产生随机字符串问题
网页上临时产生随机验证字符串问题:
  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

作者: 梁小波    时间: 2012-6-9 17:15
(int)Math.random()*26+'A'; 错了!
应该为math.random()刚生成小数,你就强转会变成0;也就是在*26还是0;
作者: 潘东升    时间: 2012-6-9 17:15
()的运算优先级别高于算术运算符,(int)先把Math.random()产生的数字强转为int型,Math.random()随机参数的数值范围是大于或等于 0.0 但小于 1.0 ,所以强转后都为0,当然结果都是‘A’了,只要把(Math.random()*26)这样括起来就可以了,你懂的
作者: 庄星睿    时间: 2012-6-9 17:22
本帖最后由 庄星睿 于 2012-6-9 17:31 编辑
潘东升 发表于 2012-6-9 17:15
()的运算优先级别高于算术运算符,(int)先把Math.random()产生的数字强转为int型,Math.random()随机参数 ...


原来是优先级的问题啊 顺便问一下,怎么把帖子的标题状态改成《已解决》啊,貌似编辑里边不能修改啊
作者: 孙新强    时间: 2012-6-9 17:39
你可以查询一下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';   都是正确的。
作者: 赵兵锋    时间: 2012-6-9 20:20
还可以这么来。
  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.         }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2