5 for循环——抽奖概率计算器
一、代码演示
这个案例是一个小型的抽奖概率计算器,帮你估算在一个抽奖游戏中中奖的概率。程序根据你设置的号码数量和抽取次数,计算出中奖的几率。是不是感觉有点像买彩票的感觉呢?
import java.util.Scanner;public class LotteryOdds3_5 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("抽奖游戏开始了!你可以抽几次?");int k = scanner.nextInt(); // 用户输入需要抽取的次数(k)System.out.println("你想设置多少个号码?");int n = scanner.nextInt(); // 用户输入总的号码个数(n)// 初始化中奖赔率int lotteryOdds = 1;// 使用for循环计算组合数 C(n, k)for (int i = 1; i <= k; i++) {// 公式: C(n, k) = n! / (k! * (n - k)!)// 可以逐步简化为: C(n, k) = n * (n-1) * ... * (n-k+1) / (k * (k-1) * ... * 1)lotteryOdds = lotteryOdds * (n - i + 1) / i;// 输出当前计算出的赔率System.out.println("你的中奖赔率是1/" + lotteryOdds + "。祝你好运!");}}
}
二、运行效果
抽奖游戏开始了!你可以抽几次?
(你输入)3
你想设置多少个号码?
(你输入)10
你的中奖赔率是 1/10。祝你好运!
你的中奖赔率是 1/45。祝你好运!
你的中奖赔率是 1/120。祝你好运!
三、代码解释
1.用户输入:
用户需要输入两个数字:
k:你可以抽取的次数(例如你从一堆号码中抽 3 个)。
n:设置的号码总数量(例如你从 10 个号码中抽奖)。
2.中奖概率计算:
公式:
lotteryOdds = lotteryOdds * (n - i + 1) / i
公式解释:这是一个经典的组合数学公式,计算从 n 个号码中抽取 k 个号码的组合数。
例如,抽取 3 次,从 10 个号码中抽取:
- 第一次计算:
lotteryOdds = 1 * (10 - 1 + 1) / 1 = 10
- 第二次计算:
lotteryOdds = 10 * (10 - 2 + 1) / 2 = 45
- 第三次计算:
lotteryOdds = 45 * (10 - 3 + 1) / 3 = 120
最终输出的 1/120 就是中奖的概率。
3.for 循环:
这个循环从 1 到 k(抽取次数)执行,逐步计算中奖赔率,并在每一步输出当前的概率。
四、思考
- 整数除法:在计算过程中,
(n - i + 1) / i
使用的是整数除法,如果i
比(n - i + 1)
大,结果会自动取整,不会出现浮点数。 - 输入校验:程序没有处理非法输入(例如 k 大于 n 或输入负数),可以在后续版本中进行改进。
五、总结
这个简单的抽奖概率计算器使用了 for 循环 和基本的组合数学公式,帮助你理解在抽奖游戏中,如何通过计算获知中奖的概率。你学到了如何使用循环结构进行数学计算,并且用生动的例子演示了程序如何实时输出结果。
是不是有种买彩票时算中奖几率的感觉呢?快去试试,看看在不同设置下,你的中奖概率会有多高!希望你下次抽奖能中大奖,祝你好运!
欢迎来到《Java 核心技术之风趣解读》专栏!
朋友们你们好,我是Theodore,这个专栏将会带你以轻松有趣的方式学习《Java 核心技术》这本书中的各种经典案例。每篇文章都会将枯燥的代码变得生动形象,穿插一些编程小故事、段子和贴心的解释,让你在欢乐中掌握 Java 编程的精髓。
不论你是刚接触 Java 的小白,还是希望巩固基础的老手,在这里你都会收获到干货和乐趣。希望你们能够在每篇文章中,不仅学到知识,还能收获一份编程的快乐。
免责声明
本专栏中的所有案例代码和讲解均来源于《Java 核心技术》一书,并经过幽默化加工,仅用于学习和分享,旨在帮助大家更好地理解 Java 编程。
- 非商业用途:所有内容仅供学习和参考,未经允许不得用于商业用途。
- 代码解释:由于风趣讲解涉及到一些轻松幽默的比喻,可能会夸张化或调侃部分编程术语,请以实际代码为准。
- 风险提示:编程是一项严谨的工作,请勿轻易在生产环境中直接使用未经测试的代码。博主会尽力确保代码的正确性,但不对因使用本专栏代码引起的任何问题负责。
- 版权声明:本专栏内容部分引用《Java 核心技术》的案例,相关版权归原书作者所有。本专栏的幽默化讲解和额外内容为原创部分,转载请注明出处。
最后,希望大家在学习的过程中开开心心,不断进步!有任何问题,欢迎在评论区留言讨论。让我们一起在 Java 世界里畅游吧!