【问题标题】:Why is my code only getting all heads or all tails when using Math.random()?为什么我的代码在使用 Math.random() 时只得到全部正面或全部反面?
【发布时间】:2021-11-04 04:02:59
【问题描述】:

我想掷硬币并生成正面或反面。 heads = 0tails = 1

然后它将更新一个数组,其中索引 0 是翻转的正面数,索引 1 是翻转的反面数。 但是,我的代码要么全部正面,要么全部反面。 Math.random() 号码生成器有问题吗?

import java.util.Random;
import java.lang.Math;

class FlipCoin
{
    public static void main(String[] args)
    {
        int[] tracker = new int[2];
        int heads = 0;
        int tails = 1;
        int tosses = 10;

        coinFlip(tracker, heads, tails, tosses);

        //System.out.printf()
    }
    
    public static void coinFlip(int[] tracker, int heads, int tails, int tosses)
    {

        int flips =(int)(Math.random());
        
        for(int x = 0; x <= tosses; x++)
        {
            if (flips == heads) 
            {
                tracker[0] ++;
                System.out.println("You flipped heads!");
            } 
            else if (flips == tails)
            {
                tracker[1] ++;
                System.out.println("You flipped tails!");
            }
        }

        for(int i = 0; i < tracker.length; i++)
        {
            System.out.println(tracker[i] + " ");
        }

    }
}

【问题讨论】:

  • 您计算了一个随机数一次,然后循环tosses + 1 次以计算相同的值。将int flips =(int)(Math.random()); 移动到您的循环中。而且,如果您只想计算tosses 次,则使用x &lt; tosses 而不是x &lt;= tosses
  • 我按照你说的做了,现在只是摇头@paddy
  • 我能够通过使用 int flips =(int)(Math.random()*2); 来修复它谢谢!

标签: java random


【解决方案1】:

从cmets总结,正确的解决方案是:

public static void main(final String[] args)
{
    final int[] tracker = new int[2];
    final int heads = 0;
    final int tails = 1;
    final int tosses = 10;

    coinFlip(tracker, heads, tails, tosses);
}

public static void coinFlip(final int[] tracker, final int heads, final int tails, final int tosses)
{
    for (int x = 0; x < tosses; x++)
    {
        int flips = (int) (Math.random() * 2);

        if (flips == heads)
        {
            tracker[0]++;
            System.out.println("You flipped heads!");
        }
        else if (flips == tails)
        {
            tracker[1]++;
            System.out.println("You flipped tails!");
        }
    }

    for (int y = 0; y < tracker.length; y++)
    {
        System.out.println((y == heads ? "Heads" : (y == tails) ? "Tails" : "") + ": " + tracker[y] + " ");
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 2018-07-04
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多