gpt4 book ai didi

java - 洗牌的随机性

转载 作者:行者123 更新时间:2023-11-29 10:09:59 25 4
gpt4 key购买 nike

我有一个包含 52 张卡片的卡片数组列表。我想洗牌。

这就是我所做的。

  1. 创建了一个新的数组列表。
  2. 生成 0 到牌组大小之间的随机索引。
  3. 在随机索引中获取卡片并添加到新列表。
  4. 从牌组中取出牌
  5. 重复直到甲板空了。

这是我的代码:

String[] Number = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
String[] Suits = {"Club","Diamonds","Hearts","Spades"};
ArrayList<Card> deck = new ArrayList<Card>();

// create a deck

for(int i=0;i<13;i++){
for(int j=0;j<4;j++){
Card card = new Card(Suits[j],Number[i]);
deck.add(card);
}
}

// shuffle of deck

ArrayList<Card> new_deck = new ArrayList<Card>();
while(deck.size()!=0){

Random rand = new Random();
int n = rand.nextInt(deck.size());

new_deck.add(deck.get(n));
deck.remove(n);
}

// Display

for(int i=0;i<52;i++){
System.out.println(new_deck.get(i).getSuit()+" : "+new_deck.get(i).getValue());
}

最后,我从新的 ArrayList 中获得了洗牌后的牌组。

它的随机性够不够好?

我应该怎么做才能增加随机性?

最佳答案

Does it's randomness is enough or not ?

定义足够好 (!!)

您当前的方法将提供良好的洗牌,没有明显的偏差......除了随机数生成器可能引入的偏差。

在这种情况下,确实值得关注。 Random 被指定为线性同余生成器,并且 LC 生成器在生成的数字中具有不同的模式。 (在统计术语中,它们显示出很强的自相关性。)如果您绘制第 n 个随机数与 n 的关系图,这一点就很清楚了。

要提高随机性,您应该使用更好的随机数生成器。 SecureRandom 生成器应该足够好:javadoc .


如果您使用 Collections.shuffle 方法,同样需要考虑随机性。对于好的(或一致的)随机播放,您应该在提供Random 实现的地方使用方法重载...并选择一个好的实现。

关于java - 洗牌的随机性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43691935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com