1

在调用另一个方法之前,我需要调用一个 void 方法。

我有这个方法

    public void shuffle() {
    various = new Random();

    currentCard = 0;
    currentTotal1 = 0;
    currentTotal2 = 0;

    for (int first = 0; first < deckOfCards.length; first++) {
        int second = various.nextInt(number_cards);

        Card temp = deckOfCards[first];
        deckOfCards[first] = deckOfCards[second];
        deckOfCards[second] = temp;
    }
}

在另一堂课中,我有:

public class GameRules {
final deck myDeckOfCards = new deck();
myDeckOfCards.shuffle(); //error here

// first
public ImageIcon GameRules1() {
    return myDeckOfCards.giveCardPlayer1().getImage();
}

基本问题是我需要在展示牌之前对牌组进行洗牌。如果没有洗牌方法,卡片的顺序是连续的

任何的想法?如果我把方法放在里面public ImageIcon GameRules1()不会出错,但是我需要在游戏前洗牌所有的牌,而不是在每个给牌方法之前。

谢谢

4

3 回答 3

8

您应该将该调用放在类的构造函数中:

public GameRules() {
    myDeckOfCards.shuffle();
}

构造函数是您为对象执行初始化任务的地方。

此外,您真的不应该有一个GameRules()返回ImageIcon. 您应该重命名该方法getImage或类似的名称。然后,当您使用构造函数创建一个GameRules并调用getImage它时,甲板将被洗牌。

例子:

GameRules gr = new GameRules(); // deck gets shuffled in constructor call
JLabel test2 = new JLabel(gr.getImage());

查看 Java 教程以获取有关为类编写构造函数的优秀教程。

于 2011-01-27T16:24:29.427 回答
5

按照建议使用构造函数,或者,如果在某些时候您有多个构造函数,您可能希望将它们共同的代码移动到初始值设定项:

public class GameRules {
final deck myDeckOfCards = new deck();

// instance initalizer
{
  myDeckOfCards.shuffle(); // no more error
}

但是,正如评论中所指出的,使用构造函数更好,必要时链接构造函数。事实证明,实例初始化器最好用在匿名类中。

于 2011-01-27T16:31:51.080 回答
2

为什么不直接在构造函数中调用shuffle方法?deck

于 2011-01-27T16:24:36.647 回答