急急,每次产生的随机数为什么都一样呢?

zhaoxuefeng 2003-07-25 01:14:12
我在TOMCAT调试下列程序时,每一次打开test2.jsp是显示的随机数为什么总是相同,不知道是什么原因,

test.jsp的代码

<a href="#" onClick="window.open('test2.jsp','','')">ffff </a>

test2.jsp的代码:
<%
double xx=java.lang.Math.random()*1000000;
String x = Long.toString(new java.util.Date().getTime());
out.println(xx);
out.println(x);
%>


谢谢了
...全文
206 点赞 收藏 18
写回复
18 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
caina3 2003-08-25
to beyondhuangjie(盖茨·比尔):
不好意思,是我的错。

呵呵,我只是看到了 WorldCreater(造化天尊)的“random(99999)了10次左右,再将它模50,得到数组里的字符”这句话。并没有认真的看前面的。
我当时恰好想起了有一个我认为比较不错的代码,就顺手摘抄了下来。
确实这段代码的确有点长,不过,其中的思维是比较清晰的。建议没事的时候也可以看一看。
该段代码即有纳秒级的系统时间,又有10位数字和字母的混合,而且,其算法也算简单,高效,还基本避免了重复。

btw:我想,有的时候,一个问题是否简单,是否复杂,不能完全的凭长短来评价。
回复
liutang2 2003-08-25
有没有搞错啊,我用自己的TOMCAT测试了你的代码,一点问题都没有啊!!
回复
beyondhuangjie 2003-08-25
简单问题复杂化,还认为自己很拽。
回复
caina3 2003-08-25
呵呵,少了一段,补上:
public static final String CreateRadom(int iLen,int iType){
String strRandom="";//随机字符串
Random rnd = new Random();
if (iLen<0){
iLen=5;
}
if ((iType>2) ||(iType<0)){
iType=2;
}
switch (iType) {
case 0 :
for (int iLoop=0;iLoop<iLen;iLoop++){
strRandom += Integer.toString(rnd.nextInt(10));
}
break;
case 1 :
for (int iLoop=0;iLoop<iLen;iLoop++){
strRandom += Integer.toString((35-rnd.nextInt(10)) ,36);
}
break;
case 2 :
for (int iLoop=0;iLoop<iLen;iLoop++){
strRandom += Integer.toString(rnd.nextInt(36) ,36);
}
break;
}
return strRandom;
}
回复
caina3 2003-08-25
挖,好麻烦的说,
嘿嘿,给你看一个随机数的,
感觉很好,很方便,而且,相同的可能性太小了。

public static final String getID(){
String curTime="";//获取当前时间
String strRandom="";//随机字符串
String strGuid="";
//格式化时间开始
SimpleDateFormat formatter;
java.util.Date currentDate=new java.util.Date();
formatter=new SimpleDateFormat("yyyyMMddkmmssSSS");
currentDate=Calendar.getInstance().getTime();
//格式化时间结束,形成具有纳秒的时间字符串
curTime= formatter.format(currentDate);
//生成随机字符串(10位,包含数字和字符)
strRandom=CreateRadom(10,2);
//生成随机字符串结束
strGuid=strRandom+curTime;
return strGuid;
}
回复
WorldCreater 2003-08-25
你解决了吗?
我也遇到这问题了,产生的随机数都一样。
我想得到随机密码。random(99999)了10次左右,再将它模50,得到数组里的字符。可是,它10次生成的字符都一样。
我查了查,打印生成的随机数,它们都一样。
回复
sandwish2000 2003-07-25
试试用不同的随机数种子!
回复
javahui 2003-07-25
对于一般的应用,java.lang.Math.random()是够了。
所以楼主的程序没有问题。是浏览器缓存的问题。
回复
YanbinQiu 2003-07-25
java.lang.Math.random()产生的随机数本来就是伪随机数,建议每次以当前的时间作为种子数,产生随机数。
回复
javahui 2003-07-25
window.open()函数打开的窗口喜欢使用缓存。你在JSP中加入:
response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma", "no-cache");
response.setHeader("Expires", "Thu, 01 Dec 1900 16:00:00 GMT");
就OK了。
回复
zheyeah 2003-07-25
hao
回复
wsstar 2003-07-25
哈。
我在jsp中没有编过类似的程序..
但在别的语言中实现过..开始还有个取种子的过程。最好通过系统时间来取种子.否则它每次显示的随机函数序列会差不多..
回复
zhaoxuefeng 2003-07-25
是不是TOMCAT的问题
回复
zhaoxuefeng 2003-07-25
清除了缓存,点链接还是相同一个值,我在其它机上试
你直接刷新test2.jsp可以,这是为什么呢?
回复
csdn_wangkp 2003-07-25
随机函数有某种情况,它的随机性可能与计算机的内寄存器的信息有些关系,如果前后两次
运行时,内存环境没发生任何变化的话,可能就一样了
,建议,随机数最好做得做复杂点,例如与系统时间发生点运算,可能会好点
回复
BluePenguin 2003-07-25
gz
回复
mechiland 2003-07-25
看上去没有什么问题啊。是不是缓存的问题?
你直接运行test2.jsp,不断刷新试试
回复
cheqiang 2003-07-25
我这里显示是不相同的!你的是不是应该清除一下CACHE?
回复
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2003-07-25 01:14
社区公告
暂无公告