摇号算法
1.创建User
package dong.bean;
public class User {
private String id;
private int factor;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public int getFactor() {
return factor;
}
public void setFactor(int factor) {
this.factor = factor;
}
}
2.测试
package dong.bean;
public class Test {
public static void main(String[] args) {
User[] users = new User[200000];
for (int i = 0; i < 200000; i++) {
User user = new User();
user.setId(String.valueOf(i));
user.setFactor(1);//可自定义中奖概率
users[i] = user;
}
//从20万人中抽500人
String winner[] = getWinner(users, new String[500], 0);
for (String win : winner) {
System.out.print(win + " ");
}
}
public static String[] getWinner(User[] users, String[] winner, int count) {
if (winner.length > users.length) {
return winner;
}
int number = winner.length;
int total = 0;
for (User user : users) {
if (user != null) {
total += user.getFactor();
}
}
for (int i = 0; i < users.length && count < number; i++) {
if (users[i] != null) {
double random = Math.random();
double t = Double.valueOf(users[i].getFactor()) / Double.valueOf(total);
if (t > random) {
winner[count] = users[i].getId();
count++;
total = total - users[i].getFactor();
users[i] = null;
}
}
}
if (count < number) {
return getWinner(users, winner, count);
}
return winner;
}
}