生成Math.random数字的问题,0或1

ala*_*m37 6 java random java.util.scanner

我已经在这个网站上看到了很多次发布的这个问题,并且相信我已经浏览了很多这么多的YouTube视频而且没有任何东西最终为我工作.正如标题所说,我想要一个随机数,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;
    }
}
Run Code Online (Sandbox Code Playgroud)

许多解决方案已被建议使用我已经完成并完美运行的util.Random选项,但我想弄清楚为什么我不能让它工作.显然我希望自己的数字是一个int,所以我在生成随机数后将其转换为int.但无论我添加或乘以Math.random(),它总是都是Heads或者都是Tails.永远不要混

任何帮助赞赏!

小智 14

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

if(Math.random() < 0.5) {
    answer = "Tails";
    tails++;
}
Run Code Online (Sandbox Code Playgroud)

删除硬币抛出方法并用上面的代码替换第一个条件.

Math.random();单独返回0.0到小于1.0的值.如果该值在下半部分[0.0,0.5],那么它具有处于上半部分的相同概率,[0.5,1.0].因此,您可以将下半部分中的任何值设置为true,将上部设置为false.


小智 7

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

 Math.round( Math.random() )  ;
Run Code Online (Sandbox Code Playgroud)

  • 不鼓励仅使用代码和“试试这个”答案。 (3认同)

Pie*_*tos 6

奇怪的是,没有人对随机数使用模除法。这是您可以获得的最简单的实现:

Random rand = new Random();
int randomValue = rand.nextInt() % 2;
Run Code Online (Sandbox Code Playgroud)


bal*_*aji 5

Math.round(Math.random()) 将返回 0.0 和 1.0。由于这两个值都在 int 范围的限制内,因此可以将它们强制转换为 int。

public static int coinToss(){
    return (int)Math.round(Math.random());
}
Run Code Online (Sandbox Code Playgroud)