问题描述
- 服务器简单算法,大转盘活动,中奖概率,靠谱吗????
-
public Integer getRand() {
Integer result = null;
int sum = 100;//后台可更改
int randomNum = new Random().nextInt(sum);// 随机生成1到sum的整数
if (randomNum == 1) {
result = 1;// 一等奖
} else if (randomNum < 5) {
result = 2; // 二等奖
} else if (randomNum <10) {
result = 3; // 三等奖
}
return result;
}这个概率应该后台可以控制吧! 后台管理有个字段,用来写各个奖品获得概率, 只要我是问问 这样靠谱吗? 大家有啥好的建议!! 其实,概率后台来设定是不是不公平??? 不透明! 嗯。。 有多少人抽奖 也不是预知的, 我再思考思考 sum 调成1000,
一等奖 中奖率是千分之一吗???
public Integer getRand() {
Integer result = -1;
int sum = 1000;// 后台可修改
int randomNum = new Random().nextInt(sum);// 随机生成1到sum的整数
int time = new Date().getSeconds() % 2;// 秒数为2 的倍数
if (time == 0) {
if (randomNum == 1) {
result = 1;// 一等奖
} else if (randomNum < 5) {
result = 2; // 二等奖
} else if (randomNum < 25) {
result = 3; // 三等奖
}
}
return result;
}
解决方案
你可以写个测试方法来测试一下
解决方案二:
这样写,逻辑上是没有问题,但是你多测试几次,就会发现中奖率高的吓人
解决方案三:
不知为何。。没有不中奖的时候!!!
解决方案四:
你这个算法应该不靠谱,中奖率太高。当然,你如果是设计的中奖概率就这么高就没有问题。
中奖的算法,不可能这么简单的。
解决方案五:
首先这个 new Random().nextInt(sum)生成的随机数范围是0<=num<sum,,,我不知道你指的靠谱是什么,,
解决方案六:
一般先根据时间或其他产生一个种子数,再使用随机数,否则每次产生的随机数序列都相同。
解决方案七:
这个中奖率确实是高的,如果是促销之类的一些推广活动,奖品小点,应该是可以的
解决方案八:
可以多加几个随机吗if (randomNum == 1) {里面继续随机,想即便就即便}
解决方案九:
前端过滤一部分,后端算法过滤一部分!
你这个中奖概率太高了,不行
解决方案十:
sum 调成1000,
一等奖 中奖率是千分之一吗???
public Integer getRand() {
Integer result = -1;
int sum = 1000;// 后台可修改
int randomNum = new Random().nextInt(sum);// 随机生成1到sum的整数
int time = new Date().getSeconds() % 2;// 秒数为2 的倍数
if (time == 0) {
if (randomNum == 1) {
result = 1;// 一等奖
} else if (randomNum < 5) {
result = 2; // 二等奖
} else if (randomNum < 25) {
result = 3; // 三等奖
}
}
return result;
}
我改成这样了