若要产生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);这样吗?
那么其实正确写法应该是(int)Math.random()*(N+1)这样吗?
如果是一定范围内的数min~max是(int)(Math.random()*(max - min + 1) + min);这样吗?
库里面的算法1是不取的。因此说0到N觉得N要取就是你改的,N不取就是网上的。因为随机的关系所以可能问题不是很明显吧,不过你的想法是对的。
(int)(Math.random()*N)+1;
这样产生的是1~N之间的数,产生min到max之间的数:
min+(int)(Math.random()*(max-min));
min+(int)(Math.random()*(max-min+1));