若要产生0~N的一个随机数,网上有很多是这样写的(int)Math.random()*NMath.random()是产生的一个[0,1)的数,加上强制转换时截取,上面的方法就会等概率的生成{0,1,..,N-1}的int型数吧
那么其实正确写法应该是(int)Math.random()*(N+1)这样吗?
如果是一定范围内的数min~max是(int)(Math.random()*(max - min + 1) + min);这样吗?

解决方案 »

  1.   

    看你怎么取了。
    库里面的算法1是不取的。因此说0到N觉得N要取就是你改的,N不取就是网上的。因为随机的关系所以可能问题不是很明显吧,不过你的想法是对的。
      

  2.   

    我觉得应该是
    (int)(Math.random()*N)+1;
    这样产生的是1~N之间的数,产生min到max之间的数:
    min+(int)(Math.random()*(max-min));
      

  3.   

    我写错了,楼主是对的
    min+(int)(Math.random()*(max-min+1));
      

  4.   

    (int)Math.random()  这样不是等于0了么? 再乘不一直也还是0么?
      

  5.   

    你得加个括号吧?要不int会先强制转换,(int)(Math.random()*10);这样就可以。我试的是这样。