黑马程序员技术交流社区
标题:
产生随机字符串问题
[打印本页]
作者:
庄星睿
时间:
2012-6-9 16:48
标题:
产生随机字符串问题
网页上临时产生随机验证字符串问题:
public class AutoConversion
{
public static void main(String[] args)
{
String result="";
for (int i=0;i<4;i++)
{
//int intVal=(int)(Math.random()*26+'A'); //这么写程序ok没问题
int intVal=(int)Math.random()*26+'A'; //这么写,应该也是正确的啊,将double类型强转成int,在'A'相加,会提升到int类型
result=result+(char)intVal;
}
System.out.println(result);
}
}
复制代码
怎么第二种写法输出结果每次都是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
还可以这么来。
public static void main(String[] args) {
char[] arr = "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789".toCharArray();
Random rand = new Random();
StringBuilder data = new StringBuilder("");
for(int i=0;i<4;i++){
data.append(arr[rand.nextInt(arr.length)]);
}
System.out.println(data.toString());
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2