首页 > 解决方案 > 这是关于 Math.random() 并转换为 (int)

问题描述

为什么变量 a 和 b 没有得到任何值?我已经这样做了,一个带有 1-100 数字的 100 面骰子被掷了 50.000 次,我想看看它多久给出数字 1 和 100,但它没有得到任何价值。结果仍然是 a= 0 和 b = 0。

package Atest;
import javax.swing.*;

public class Tärning5{
    public static void main(String[] arg){

        int rolls;
        double dice = (int) (Math.random()*100) + 1;
        int n = 0;
        int b=0, a=0;

        for(rolls=50000; n<=rolls; dice = (int) (Math.random()*100) + 1) {
            n++;

            if(dice == 100) 
                a = a++;
            else if (dice == 1) 
                b = b++;
        }

                JOptionPane.showMessageDialog(null, "Dice rolls " + rolls + " times"
                        + "\n"
                        + "\nDice landed on 100 " +a+" times"
                        + "\nDice landed on 1 "+b+" times");  
         }
    }

标签: java

解决方案


我建议使用 java.util.Random 生成随机数。您还可以简化循环,使其更简单。

    int a = 0;
    int b = 0;
    int rolls = 50000;
    Random random = new Random();
    for (int i = 0; i < rolls; i++) {
        int dice = random.nextInt(100) + 1;

        if (dice == 100) a += 1;
        if (dice == 1) b += 1;
    }

    System.out.println("a: " + a + ", b: " + b);

“for”语句中的条件不涉及迭代计数以外的任何内容。在循环内部,我们可以通过使用现有的 Random 创建下一个随机整数来“模拟”掷骰子(在此示例中:在 1 到 100 的范围内)。

示例输出:

a: 502, b: 475

推荐阅读