硬币美元随机类java奇怪的问题

时间:2014-06-10 19:02:05

标签: java

所以基本上我被分配来创建一个Coin类,它包含一个无参构造函数,void toss方法和返回sideUp字段值的getSideUp方法。

然后,我必须使用这个类来创建一个折腾硬币游戏,基本上我们将一个名为balance的变量设置为0.我还需要有3个硬币类对象:即角钱,镍和四分之一。每当他们抬头时,我们都应该将价值添加到余额变量中。当余额超过或等于1美元时游戏结束,如果你花1美元就赢了。

到目前为止,我有以下代码:

import hsa.*;
import java.util.Random;

public class CoinDollar
{
    public static void main (String[] args)
    {
        double balance = 0.0;
        Coin dime = new Coin ();
        Coin nickel = new Coin ();
        Coin quarter = new Coin ();

        while (balance < 1.00)
        {
            dime.toss ();
            nickel.toss ();
            quarter.toss ();

            Stdout.println ("Dime: " + dime.getSideUp ());
            Stdout.println ("Nickel: " + nickel.getSideUp ());
            Stdout.println ("Quarter: " + quarter.getSideUp ());

            if (dime.getSideUp ().compareTo ("Head") == 0)
                balance += 0.10;
            if (nickel.getSideUp ().compareTo ("Head") == 0)
                balance += 0.05;
            if (quarter.getSideUp ().compareTo ("Head") == 0)
                balance += 0.25;

            Stdout.println ("Your current balance is $" + balance);

            Stdout.println ();
        }

        if (balance == 1.00)
            Stdout.println ("You Win!");
        else
            Stdout.println ("You lose! Your balance exceeds $1!");

    }
}


class Coin
{
    private String sideUp;
    private int side;
    private Random abc = new Random ();

    public Coin ()
    {
        side = abc.nextInt (2);
        if (side == 1)
            sideUp = "Head";
        else
            sideUp = "Tail";
    }


    public void toss ()
    {
        side = abc.nextInt (2);
        if (side == 1)
            sideUp = "Head";
        else
            sideUp = "Tail";
    }


    public String getSideUp ()
    {
        return sideUp;
    }
}

这个程序汇编得很好,但我认为这是随机的问题。每当角钱出现时,一切都是抬头(反之亦然)。

任何帮助都将受到高度赞赏。

2 个答案:

答案 0 :(得分:2)

不要使用Random,只需在(int)(Math.random() * 2)使用side = abc.nextInt (2);,减少对象的需要,并获得相同的结果。

答案 1 :(得分:0)

您可能在生成随机数时看到错误的原因是计算机上生成随机数的方式。

计算机非常具有确定性,因此本质上不太擅长生成随机数。幸运的是,计算机科学家很聪明,并且想出了生成“伪随机”数字序列的方法。这些算法生成这些序列的常用方法是从一个数字开始,称为“种子”。然后,序列对种子重复操作以获得序列的新值。如果关系设计得当,这个数字序列可以随机传递。

通常,随机数发生器由系统的当前时间播种。因此,如果这些发电机中的两个用相同的数字播种,它们将产生相同的数字。由于您的类是在同一时间生成的,因此生成器将被赋予相同的种子。

可在此处找到更多信息:http://en.wikipedia.org/wiki/Random_number_generation

如果您想解决这个问题,可以通过提供不同的种子来确保Random对象不同,或者使用Math库。

side = Math.round(Math.random());

Math.random()生成一个介于0和1之间的随机数.Math.round()将数字四舍五入为最接近的整数。由于随机数小于0.5的概率为50%,因此有一个概率为0或1的概率为50%,这正是您所寻找的。