-1

所以这是我的问题:我正在创建一个 String[] 变量来调用 main 方法以进行检查。每次我调用该变量时,它都会创建一个新牌组。我已经在方法和变量上尝试了 final 。这是我的 Dealer 类,它有我的 shuffle 方法。谢谢你的帮助。

package blackjack;

import java.util.*;

public class Dealer {
private Deck deck = new  Deck();
private String[] deckArr = deck.deckArr;
private List list = new ArrayList<>(Arrays.asList(deckArr));
public String[] shuffDeck = shuffleDeck(deckArr);
private int count = 0 ;



public final String[] shuffleDeck(String[] deck) {
    Collections.shuffle(list);
    List<String> shufList = list;
    deck = shufList.toArray(new String[shufList.size()]);
    return deck;
    }

public String deal() {
    String dealtCard = null;
    if (count < 52) {
      dealtCard = shuffDeck[count];

    }
    else {
        shuffleDeck(deckArr);
        this.count = 0;
    }
    this.count++;
    return dealtCard;
}
}

我的主要方法:主要用于测试目的。

package blackjack;

public class BlackJack {


public static void main(String[] args) {
    Deck deck = new Deck();
    Dealer dealer = new Dealer();
    String str = dealer.deal();

    for(int i = 0; i <52; i++)
        System.out.println(dealer.shuffDeck[i]);
        System.out.println();
        System.out.println();
        System.out.println(str);


    }

 }
4

3 回答 3

1

Collections.shuffle()正在使用Random()播种System.currentTimeMillis()的新牌组,因此如果计时器已更改,则每次洗牌都会给出一个新牌组。

如果您Random()每次使用相同的种子运行 shuffle Collections.shuffle(list, new Random(123)),如果您从相同的牌组开始,您可以获得相同的输出。

于 2013-04-22T21:54:08.287 回答
0

我根据问题中的有限信息在这里猜测,但我认为你做错了。您可能只想调用shuffleDeck()一次,并在 for 循环中调用deal()多次。

如果我的假设是错误的,那么再次澄清您的问题。

于 2013-04-22T21:52:52.487 回答
0

我认为你有一些错别字:

public final String[] shuffleDeck(String[] deck) {
    Collections.shuffle(list);
    List<String> shufList = list;
    deck = shufList.toArray(new String[shufList.size()]);
      ^------> THIS SHOULD BE shuffDeck
    return deck;
             ^------> THIS SHOULD BE shuffDeck
}

因为deck是一个Deck实例,而您正在返回 aString[]并且基于它,您似乎真正想要的是返回shuffDeck

于 2013-04-22T21:53:40.530 回答