生成数学随机数(0 或 1)时出现问题

2022-09-03 08:30:14

我想要一个随机数,0或1,然后它将返回到main(),如下面的代码所示。

import java.util.Scanner;
public class Exercise8Lab7 {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        int numFlips = 0;
        int heads = 0;
        int tails = 0;
        String answer;


        System.out.print("Please Enter The Number Of Coin Tosses You Want: ");
        numFlips = input.nextInt();

        for(int x = 1;x <= numFlips; x++){
            if(coinToss() == 1){
                answer = "Tails";
                tails++;
            }
            else{
                answer = "Heads";
                heads++;
            }
            System.out.print("\nCoin Toss " + x + ": " + answer);
        }
        System.out.println("\n\n====== Overall Results ======" +
        "\nPercentage Of Heads: " + (heads/numFlips)*100 + "\nPercentage Of Tails: " + (tails/numFlips)*100);
    }

    public static int coinToss(){
        double rAsFloat = 1 * (2 + Math.random( ) );
        int r = (int)rAsFloat;
        return r;
    }
}

已经提出了许多使用该漏洞的解决方案。随机选项,我已经完成并完美地工作,但我想弄清楚为什么我不能让它工作。显然,我希望这个数字自己是一个int,所以我在生成随机数后将其转换为int。但无论我添加或乘以 Math.random() 什么,它总是要么是头,要么都是尾。从不混合。


答案 1

试试这个)它将生成数字01

 Math.round( Math.random() )  ;

答案 2

您可以使用布尔值 0 或 1,其值基于 0.0 和 1.0 之间的双精度值,并使随机生成器更加简单。你可以完全摆脱这种方法。Math.random()coinToss()

if(Math.random() < 0.5) {
    answer = "Tails";
    tails++;
}

删除掷硬币方法,并将第一个条件替换为上面的代码。

Math.random();本身将返回一个介于 0.0 和小于 1.0 之间的值。如果值位于下半部分 [0.0, 0.5),则它具有与位于上半部分 [0.5, 1.0) 的概率相同的概率。因此,您可以将下半部分的任何值设置为 true,将上半部分的任何值设置为 false。


推荐