【发布时间】:2017-02-15 10:24:51
【问题描述】:
我的问题是我似乎无法在 CardDeck 类中使用我的 shuffle() 方法,它是 private (必须是私有的)。不太确定是应该在drawNextCard() 方法中使用它还是在CardDeck() 构造函数中使用它。我也不太确定我的编码是否正确。任何建议/提示将不胜感激!
import java.util.*;
public class CardDeck
{
private String[] ranks = {"2", "3", "4", "5", "6", "7", "8", "9", "10",
"J", "Q", "K", "A" };
private char[] suits = {'s','h','d','c'};
private Card[] cards = new Card[13];
private int currentCard;
CardDeck()
{
Card newCard;
for(int i=0; i<4; i++)
{
for(int j=0; j<13; j++)
{
cards[j] = new Card(this.ranks[j], this.suits[i]);
}
}
}
public void testing() //just for testing
{
System.out.println(this.suits[0]);
}
public Card drawNextCard()
{
return cards[currentCard++];
}
private void shuffle()
{
Card[] tmp = new Card[200];
for (int i = 0; i < cards.length; i++)
{
int index = i + (int)(Math.random() * (cards.length));
tmp[i] = cards[i];
cards[i] = cards[index];
cards[index] = tmp[i];
}
}
}
主要:
public class BlackJoker
{
public static void main(String[] args)
{
CardDeck cardDeck = new CardDeck();
cardDeck.testing();
System.out.println(cardDeck.drawNextCard());
System.out.println(cardDeck.drawNextCard());
System.out.println(cardDeck.drawNextCard());
System.out.println(cardDeck.drawNextCard());
System.out.println(cardDeck.drawNextCard());
System.out.println(cardDeck.drawNextCard());
}
}
我的测试输出是
s
2c
3c
4c
5c
6c
7c
【问题讨论】:
-
你想如何使用
shuffle()?你永远不会在这段代码中调用它。 -
另外:你的牌组应该有 52 张牌长。您创建 13 张卡片,然后覆盖它们。
-
我在这里根本看不到问题。这只是您想要实现它的方式。如果你想在拿到下一张牌之前洗牌,你应该在
drawNextCard方法中调用它。否则,如果您希望它仅在开始时被洗牌,请在构造函数中调用它。 -
你可以在构造函数中调用你的方法就好了。那有什么问题?另外,我不确定我是否需要任意大小的
tmp数组 -
大家好,感谢您的回复。好的,所以我尝试在 drawNextCard 中调用 shuffle 方法,但我似乎通过使用此“Card.this.shuffle();”得到了一条错误消息。我尝试了许多可能的调用方式,例如“CardDeck.cards.shuffle();”或“this.shuffle();”但我收到如下错误消息:线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException: 53 或 CardDeck.java:31: not an enclosure class: Card Card.this.shuffle(); ^