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 に答える