【发布时间】:2021-10-25 14:49:17
【问题描述】:
我正在分析以下有关彩票赔率的代码,我有 2 个问题:
-
为什么我们需要先将 lotteryOdds 的值设置为 1(另外,这种类型的计算中是否经常出现这种情况?)
-
我知道用于计算赔率的公式 (n*(n-1)...(n-k+1)/(1*2...*k),但如果有人向我解释它是如何工作的按照重复“for”循环,我将不胜感激。
import java.util.Scanner; public class LotteryOdds { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.println(" How many numbers do you need to draw? "); int k = in.nextInt(); System.out.println(" what is the highest numbers you can do draw? "); int n = in.nextInt(); int lotteryOdds = 1; for (int i = 1; i <= k; i++) { lotteryOdds = lotteryOdds * (n - i + 1) / i; System.out.println("Your odds are 1 in " + lotteryOdds + " . Good luck!"); } }}
【问题讨论】:
-
想想如果
lotteryOdds为 0 会发生什么:lotteryOdds = 0 * (whatever)将导致... 0。:) -
是的,我明白,但是为什么我们需要定义它。
-
公式不应该是
n!/(k! * (n-k)!)吗?这意味着您需要计算 3 个阶乘:n!、k!和(n-k)!- 所以您只需要一种使用一个循环来计算阶乘的方法。 -
“为什么我们需要定义它” - 那是因为您的代码需要它,即在某些时候您必须定义变量(并且您的代码会立即需要它或者您将如何计算
odds * whatever如果odds没有定义?而且您需要在任何情况下初始化任何局部变量,否则您将无法使用它。
标签: java for-loop math java.util.scanner