2011-01-27 104 views
1

我需要在調用另一個方法之前調用void方法。invoke 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()裏面的方法不給出錯誤,但是我需要在遊戲之前洗牌所有牌,在每個牌牌方法之前都沒有。

感謝

回答

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()); 

檢查出良好的tutorial on writing constructors for your classes.

+0

感謝您的回答。如果我做你的建議,我仍然有同樣的問題。我可以如何調用GameRules()方法來做類似的事情:final JLabel test2 = new JLabel(test00.GameRules1()); ??這就是問題 – anvd 2011-01-27 16:31:52

+0

@Fel,你真的不應該有一個叫做GameRules()的方法返回一個Image。您應該將該方法重命名爲`getImage`或類似的東西。然後,當你使用構造函數創建一個GameRules並調用`getImage`時,這個套牌將被洗牌。 (見我的編輯。) – jjnguy 2011-01-27 16:34:52

2

你爲什麼不叫shuffle方法deck直接構造了Java教程?

5

要麼使用構造函數的建議,或者,如果在某些時候,你有多個構造函數,你不妨來移動是共同的他們的初始化代碼:

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

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

但是,正如指出的在評論中,使用構造函數更好,必要時鏈接構造函數。事實證明,實例初始化器最適用於匿名類。