2011-01-27 4 views
1

Мне нужно вызвать метод void перед вызовом другого метода.invoke void method

У меня есть этот метод

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

Заканчивать учебники Java для хорошей tutorial on writing constructors for your classes.

+0

спасибо за ваш ответ. Если я сделаю то, что вы предлагаете, у меня все еще будет такая же проблема. Как я могу назвать метод GameRules(), я делаю что-то вроде этого: final JLabel test2 = new JLabel (test00.GameRules1()); ?? вот в чем проблема – anvd

+0

@Fel. У вас действительно не должно быть 'метода'' GameRules() ', который возвращает изображение. Вы должны переименовать этот метод в 'getImage' или что-то в этом роде. Затем, когда вы создадите GameRules с помощью consturctor и назовите 'getImage', колода будет перетасована. (См. Мое редактирование.) – jjnguy

+0

Я решил проблему с { myDeckOfCards.shuffle(); } спасибо – anvd

2

Почему вы не звоните shuffle метод в deck конструктора напрямую?

5

Либо использовать конструктор как это было предложено, или, если в какой-то момент у вас есть несколько конструкторов, вы можете переместить код, который является общим для них инициализаторе:

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

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

Но, как было отмечено в комментариях лучше использовать конструктор, при необходимости создавая конструкторы цепочки. Оказывается, что инициализаторы экземпляров лучше всего использовать в анонимных классах.

+0

проблема решена, спасибо вам за помощь и время – anvd

+1

Это не мудрая идея. Если у вас есть несколько конструкторов, которые используют один и тот же код, всегда лучше выполнять цепочку конструкторов вместо инициализатора экземпляра. Weegee

+0

@Weegee, полностью согласен. – jjnguy

Смежные вопросы