【问题标题】:Java Generating random numbers in a for loopJava在for循环中生成随机数
【发布时间】:2013-10-11 07:15:37
【问题描述】:

我正在创建一个二十一点程序,并尝试在程序开始时向玩家随机发牌。这是我用 Java 编写的最初向玩家发牌的函数。

public static int[][] initDeal(int NPlayers)
    {
        int hands[][] = new int[NPlayers][2];

        for(int a = 0; a<NPlayers; a++)
        {

            hands[a][0] = (int)Math.round((Math.random() * 13))-1;
            hands[a][1] = (int)Math.round((Math.random() * 13))-1;

        }
        return hands;
    }

我认为 Random 方法和 for 循环存在问题,因为虽然每个玩家的两张牌是随机生成的,但所有玩家都得到了相同的牌。

【问题讨论】:

  • 你有什么问题?
  • 如果我是你,我会将你的多维数组换成Hand 对象的列表或数组或其他东西。会让一切变得更干净。
  • 你为什么不用java.util.Random.nextInt(13)
  • @Masud 它会生成两个随机数,但对于 for 循环的每个实例都是相同的两个。如果 NPlayers 为 2,则 hands[0][0] 和 hands[1][0] 相同,而 hands[0][1] 和 hands[1][1] 相同。这意味着所有玩家都得到相同的牌。
  • 您的代码在 ideone 上运行良好。 Here is the link.

标签: java loops for-loop random blackjack


【解决方案1】:

你需要有一副“牌组”之类的牌,随机洗牌,然后将它们从牌组中取出,将它们分发给玩家。

否则你可以两次发同一张牌,这在现实生活中是不可能的。 (虽然可以使用更大的牌组。)

public class Card {
    public enum Suit {HEART, DIAMOND, CLUB, SPADE};
    public int getValue();         // Ace, Jack, Queen, King encoded as numbers also.
}

public class Deck {
    protected List<Card> cardList = new ArrayList();

    public void newDeck() {
       // clear & add 52 cards..
       Collections.shuffle( cardList);
    }
    public Card deal() {
        Card card = cardList.remove(0);
        return card;
    }
}

如果/当您确实需要生成随机整数时,您应该使用截断,而不是四舍五入。否则,底部值将只有其期望概率的一半..

int y = Math.round( x)
0   - 0.49   ->    0         // only half the probability of occurrence!
0.5 - 1.49   ->    1
1.5 - 2.49   ->    2
..

没有要截断的Math 函数,只需转换为int

int faceValue = (int) ((Math.random() * 13)) + 1;

或者,您可以使用 Random.nextInt(n) 函数来执行此操作。

Random rand = new Random();
int faceValue = rand.nextInt( 13) + 1;

填空。

【讨论】:

    【解决方案2】:

    尝试使用java.util.Random 类的nextInt(n)。在哪里n = 13。 但从表面上看,问题似乎出在其他地方。该函数确实返回随机值,但您没有在其他地方正确使用它。

    【讨论】:

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