Java仿抽奖系统
前言
今天也是刚看完最近挺火的电影《孤注一掷》,也是亲眼的看到了,一个完整的家庭,是如何因为赌,而导致分崩离析,最后导致走向破碎的。
一旦涉及到电子的东西,很多东西都是变得可以控制的。这个作为程序员的我们是最清楚的,同时现在的反诈宣传,做的也是非常的到位,当时剧中哪位女警说的话,影响也非常的深刻。人都有贪心和不甘心,这也就是赌能真正抓住人的东西
好了不说那么多了,下面看一个简易的程序的代码实现
代码实现
首先我们定义一些常量
1 2 3
| private static final int PRIZE_LEVELS = 4; private static final int[] PRIZE_AMOUNTS = {1, 10, 100, 1000}; private static final double[] WINNING_RATES = {10, 0, 0, 0};
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| public static void main(String[] args) { double winningRate = 0.1;
int prize = drawLottery(winningRate);
if (prize > 0) { System.out.println("恭喜你中奖了!奖金:" + prize + "元"); } else { System.out.println("很遗憾,未中奖"); } }
private static int drawLottery(double winningRate) { Random random = new Random(); int prize = 0;
for (int i = 0; i < PRIZE_LEVELS; i++) { if (random.nextDouble() < winningRate * WINNING_RATES[i]) { prize = PRIZE_AMOUNTS[i]; break; } }
return prize; } }
|
一个简单的抽奖程序。我们根据这个进行一些修改,更加的客观真实,我们加上已经有的金额和权重,让他更像是真正的赌。
我们加入权重以及自己的现金
1 2 3
| private static double[] WEIGHTS;
static int cashBalance = 1000;
|
之后我们进行这样设计
1 2 3 4 5 6 7 8 9 10
| public static void main(String[] args) { calculateWeights();
int cashBalance = 1000;
drawLottery(cashBalance); }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public static void calculateWeights() { WEIGHTS = new double[WINNING_RATES.length]; double totalWeight = 0;
for (double rate : WINNING_RATES) { totalWeight += rate; }
for (int i = 0; i < WEIGHTS.length; i++) { WEIGHTS[i] = WINNING_RATES[i] / totalWeight; } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| public static void drawLottery() { Random random = new Random(); double randomValue = random.nextDouble();
int prizeIndex = 0; double cumulativeWeight = 0;
for (int i = 0; i < WEIGHTS.length; i++) { cumulativeWeight += WEIGHTS[i]; if (randomValue <= cumulativeWeight) { prizeIndex = i; break; } }
if (random.nextDouble() <= WINNING_RATES[prizeIndex]) { int prizeAmount = PRIZE_AMOUNTS[prizeIndex]; System.out.println("恭喜您中奖了!获得奖金:" + prizeAmount + "元"); cashBalance += prizeAmount; } else { System.out.println("很遗憾,未中奖。"); }
cashBalance -= COST_PER_DRAW; System.out.println("抽奖后的现金余额:" + cashBalance + "元"); }
|
可以看出,我们这里规定的是20元抽奖一次,最高能达到1000元。

运行一次后发现从原来的升值到了5000,
可是当你一旦陷入进去的话,只要我们稍微修改一下中奖率

就会不断的去输。
赌博有害健康,需要我们每个人去制止