gpt4 book ai didi

java - 创建抽奖方法

转载 作者:行者123 更新时间:2023-12-02 11:19:26 25 4
gpt4 key购买 nike

你好。

我正在开发一款游戏中的彩票系统。

我的目标是根据玩家输入的金额和抽奖时的彩票总值(value)随机抽取一名玩家。 E.G Pot 为 100k,玩家 1 投入了 10k,玩家 2 投入了 20k,这意味着玩家 1 有 1/10 的获胜机会,玩家 2 有 2/10 的获胜机会。

totalPot,这是底池的总值(value)
randomNR,这是随机数生成
userInput,这是用户投入抽奖的总输入。
玩家,这是输入上述金额的玩家

我已经尝试过这个:

public static void drawLottery() {

int totalPot = lotteryPot - 250;
int randomNR = Misc.randomInt(0, lotteryPot);

List<Player> keys = new ArrayList<Player>(lotteryEntries.keySet());
Collections.shuffle(keys);

for(int i = 0; i < totalPot;) {
for (Player o : keys) {
i += lotteryEntries.get(o);
if (i >= randomNR) {
System.out.println("Winner: " + o.getUsername() + " -> Random number: " + randomNR);
}
break;
}
break;
}

}

但这只会导致同一个玩家被一遍又一遍地吸引。
我不知道该怎么办,非常感谢您的帮助。

最佳答案

您可以迭代所有彩票条目并保留累积总数。累计总数第一次超过中奖号码的玩家获胜。

例如:

Player 1: 20
Player 2: 30
Player 3: 50
Player 4: 10

中奖号码选择为 51。累计总数从 20 开始。这不大于 51,因此玩家 1 尚未获胜。然后我们增加到 50。不大于 51,玩家 2 还没有获胜。然后我们增加到 100,它大于 51,因此玩家 3 获胜。

public static Player getWinner(int winningNumber, Map<Player, Integer> lotteryEntries)
{
int cumulativeProbability = 0;
for (Map.Entry<Player, Integer> entry : lotteryEntries.entrySet())
{
cumulativeProbability += entry.getValue();
if (cumulativeProbability >= winningNumber)
{
return entry.getKey();
}
}
throw new RuntimeException("Winning number not within total pot size");
}

关于java - 创建抽奖方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50037646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com