gpt4 book ai didi

Java:洗一副 32 张牌?

转载 作者:搜寻专家 更新时间:2023-10-31 20:27:21 25 4
gpt4 key购买 nike

这个方法是我自己写的,请问有没有更好的方法?

public Card[] shuffle(){
for(int i = 0; i < Deck.length; i++){
int x = i + (int) (Math.random() * (32 - i));
Card temp = Deck[i];
Deck[i] = Deck[x];
Deck[x] = temp;
}
return Deck;
}

最佳答案

如果 ( 32 - i ) 给出任何小于 0 的值,您就不会检查。该算法称为 Fisher-Yates洗牌算法,与您的非常相似:

private int [] shuffleMyArray ( int [] array ) {
int size = array.length, i = 0;
int temp = 0;
while ( size != 0 ) {
i = ( ( int ) ( Math.random () * size-- ) );
if ( i < 0 ) {
i = 0;
}
temp = array [ size ];
array [ size ] = array [ i ];
array [ i ] = temp;
}
return array;
}

编辑 1:

两种算法的输出将更好地让您理解两者之间的区别,看看 Fisher-Yates 如何在改组时考虑所有索引。

输出:

Actual Array
0 1 2 3 4
Your Implementation output
i: 0 x: 3
i: 1 x: 4
i: 2 x: 3
i: 3 x: 4
i: 4 x: 4
Fisher Yates implementation output
i: 4 size: 4
i: 2 size: 3
i: 1 size: 2
i: 0 size: 1
i: 0 size: 0

关于Java:洗一副 32 张牌?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30745786/

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