日期:2014-05-20  浏览次数:20602 次

一个死循环问题????
下面这两句有什么不同么?
            ori[i]=(int)Math.random()*10;       (1)
            ori[i]=(int)(Math.random()*10;)     (2)
  放在如下的循环中
                for(int   i=0;i <=3;i++){
        ori[i]=(int)Math.random()*10;
//ori[i]=(int)(Math.random()*10);
for(int   j=0;j <=i-1;j++){
    if((i!=j)&&(ori[i]==ori[j])){
        i=i-1;
break;
    }
}
    }
      时,为啥第一句是是死循环呢????
    想不明白…………

------解决方案--------------------
(int)Math.random()等于0
因为Math.random()比1小
------解决方案--------------------
Math.random()生成的数在0、1之间,你第一种方式将Math.random()先强制转换,结果一定是0,ori[i]=(int)Math.random()*10效果实际上就是ori[i]=0;这样就不难理解为什么一直是死循环了
------解决方案--------------------
修改成 ori[i]=(int)(Math.random()*10)
------解决方案--------------------
XXKKFF(齐次边界条件有界弦自由振动方程混合问题的分离变量法)

说的好!
------解决方案--------------------
路过 学习
------解决方案--------------------
没错。来晚了。只有地板了.............
------解决方案--------------------
看来为了正常运行多加点括号还是有必要的
------解决方案--------------------
适当的括号代码更加容易读
------解决方案--------------------
我是来学习的,我看了楼上的回复还没有明白,你说的到是很对,但是好象那不是产生死循环的原因吧,也就是ori[i]全部元素都是0罢了.