【问题标题】:My programm does not calculate right (Java)我的程序计算不正确(Java)
【发布时间】:2020-03-12 18:46:50
【问题描述】:

我必须编写一个程序来计算中奖概率 以奥地利系统计算(45 个中有 6 个)。

我使用这个公式:45!/6!*39! = 45 *44*43*42*41*40/1*2*3*4*5*6(因为数字被缩短了)。但计算不正确,程序给出2179827 作为答案而不是8415060。有人可以帮我告诉我错误在哪里吗?

package homework_1;

public class Aufgabe_3 {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        int n = 45*44*43*42*41*40;
        int m = 1*2*3*4*5*6;
        int w = n/m;

        System.out.println("Die Wahrscheinlichkeit ist: " + w);
    }

}

提前非常感谢您! :)

【问题讨论】:

  • 45 * 44 * 43 * 42 * 41 * 40 = 5864443200 > 2147483648 = 2^31 = Integer.maxValue()
  • 备注:程序计算的不是概率(Wahrscheinlichkeit),而是唯一事件的数量。概率是倒数(因为这是一个相等的分布)。

标签: java calculation


【解决方案1】:

在您的代码45*44*43*42*41*40 中,它将超过int 限制。使用long 存储结果

long n = (long)45*44*43*42*41*40;
long m = (long)1*2*3*4*5*6;
long w = n/m;

【讨论】:

  • 你好。非常感谢您的帮助,我将其更改为 long 但它仍然给出错误的答案?你知道为什么吗?
  • 您是否更改了所有 3 个变量?因为如果其中任何一个是 int 结果将被类型转换为 int 给出错误。
  • 现在试试long n = 45*44*43*42*41*40*39*38;,看看会发生什么。你会看到n 将持有-1908984704。问题是第一个值被计算为整数,然后将结果(仍然是 int)分配给 long 变量。
  • 你计算出来的n1569475904,但应该是5864443200
  • @Pshemo 不需要将*39*38 添加到该列表中,它已经溢出了。
【解决方案2】:

您的代码按预期工作,但 45*44*43*42*41 超过 Integer.MAX_VALUE。 (2147483647)

使用长。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    相关资源
    最近更新 更多