我在纸牌nextCard = deck.dealCard();
中洗牌后,应在顶部抽出纸牌。问题在于它始终显示"ACE of DIAMONDS"
(我认为是创建牌组时的第一张牌),而不是正确的牌,而且我的牌组仍然是相同大小(52)。但是,当我使用deck.dealCard();
进行测试时,效果很好,我的牌组将升至51,并显示正确的卡片。如何修复nextCard
?'
随机播放和填充甲板都被称为main,并且工作正常。 (它们不是问题)。如前所述,当我仅使用deck.dealCard();
时,效果很好。
public class Game {
Deck deck = new Deck();
Pile pile = new Pile();
Card nextCard;
public void initNewGame(){
//nextCard=null; //this don't help
deck = new Deck();
deck.fill();
pile.clear();
}
public Card pickNextCard(){
nextCard = deck.dealCard();
return nextCard;
}
}
这是来自Deck班的:
public Deck(){
theCards = new ArrayList<Card>();
fill();
}
public Card dealCard(){
return theCards.remove(0);
}
public void shuffleCards(){
Collections.shuffle(theCards);
}
public void fill(){
theCards.clear();
for(Suit suit : Suit.values()){
for(Rank rank : Rank.values()){
theCards.add(new Card(rank, suit));
}
}
}
这是主要的:
public static void main(String[] args) {
Deck deck = new Deck();
Pile pile = new Pile();
Game game = new Game();
deck.shuffleCards();
System.out.println("\nLogic.CardNow: " + game.pickNextCard() +"\n");
}
答案 0 :(得分:5)
之所以会这样,是因为您有两个甲板,而不是一个。
public static void main(String[] args) {
Deck deck = new Deck(); // deck 1
Pile pile = new Pile();
Game game = new Game(); // contains another deck, deck 2
deck.shuffleCards(); // deck 1 is now shuffled
System.out.println("\nLogic.CardNow: " + game.pickNextCard() +"\n"); // deck 2 (NOT SHUFFLED)
}
您需要让game
使用外部(经过改组的)牌组,或者需要对game
内部的牌组进行改编。
最简单的选择是更新您的initGame
方法来洗牌:
public void initNewGame(){
deck = new Deck();
deck.fill();
deck.shuffleCards(); // shuffle your deck
pile.clear();
}