gpt4 book ai didi

java - 创建一个 Java 洗牌程序

转载 作者:行者123 更新时间:2023-12-01 19:59:16 24 4
gpt4 key购买 nike

我正在尝试在java中创建一个洗牌器,通过执行进出洗牌来执行“完美洗牌”(将牌分成两半并交错每张牌,然后再重复一次)。我有以下代码来执行随机播放。

public class Shuffle {

private static final int shuffleCount = 2;

private static final int valueCount = 52;

public static void main(String[] args){
System.out.println("Result of " + shuffleCount + "perfect shuffles" );

int[] value1 = new int[valueCount];
for (int i = 0; i < value1.length; i++){
value1[i] = i;
}//ends valueCount for loop
for (int j = 1; j <= shuffleCount; j++){
riffleShuffle(value1);
System.out.println(" " + j +":\n");
for(int k = 0; k < value1.length; k++){
System.out.println(" " + value1[k]);
}
System.out.println();
}//ends shuffleCount for loop
System.out.println();
}

public static void riffleShuffle(int[] value){

int[] temp = new int[value.length];
int startFirst = 0;
int startSecond = value.length / 2;
for (int i = 0; i < value.length; i+=2){
temp[i] = value[startFirst];
temp[i+1] =value[startSecond] ;
startFirst ++;
startSecond ++;
}
for (int i =0; i< value.length; i++)
value[i] = temp[i];

}

}

我正在尝试将其实现到我的套牌类中,因此它不会洗牌数字 0-52,而是洗牌一副牌。我的套牌类如下所示;

public class Deck {


private List<Card> cards;


private int size;//number of cards in deck


public Deck(String[] faces, String[] suits, int[] values){
cards = new ArrayList<Card>();
for(String suit: suits)
for(int value = 0; value < values.length && value < faces.length; value++){
Card a = new Card(faces[value], suit, values[value]);
cards.add(a);
}
size = cards.size();
shuffle();

}//ends deck

public boolean isEmpty(){
return cards.isEmpty() && size == 0;
}//ends isEmpty

public int size(){
return cards.size();
}//ends size

public void shuffle(){
for (int i = cards.size() - 1; i > 0; i--){
int pos = 0;
Card a = cards.remove(pos);
cards.add(i, a);
}

}//ends shuffle

public Card deal(){
size --;
Card a = cards.get(size);
return a;
}//ends Card deal

@Override
public String toString(){
String deck_rtn = "\nsize = " + size + "\n\nUndealt cards: \n\n";

for(int k = size -1; k >= 0; k--){
deck_rtn = deck_rtn + cards.get(k);
if (k != 0){
deck_rtn = deck_rtn + ", ";
}//ends first if

if ((size - k) % 2 == 0) {
deck_rtn = deck_rtn + "\n";
}//ends second if

}

deck_rtn = deck_rtn + "\nDealt cards: \n";
for (int k = cards.size() - 1; k >= size; k--){
deck_rtn = deck_rtn + cards.get(k);
if (k != size){
deck_rtn = deck_rtn + ", ";
}
if ((k - cards.size()) % 2 ==0){
deck_rtn = deck_rtn + ", ";
}
}

deck_rtn = deck_rtn + "\n";
return deck_rtn;

我发现我的问题源于尝试将其实现到我的套牌类中的洗牌方法中。

    public void shuffle(){
for (int i = cards.size() - 1; i > 0; i--){
int pos = 0;
Card a = cards.remove(pos);
cards.add(i, a);
}

}//ends shuffle

有人有什么想法吗?非常感谢所有帮助,谢谢。附言。我试图尽可能避免使用快速集合类方法,我对 java 很陌生,并且想在使用集合类之前首先完全理解事物。

最佳答案

我不确定你所说的完美洗牌是什么意思。 java的Collections.shuffle方法有什么问题吗?

    List<Card> cards = new ArrayList<>(52);
Collections.shuffle(cards);

关于java - 创建一个 Java 洗牌程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59397518/

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