2

私は個人的なプロジェクトに取り組んでいます。ポケモンに例えられるようなカードゲームになります。残念ながら、エラーが発生しており、その原因がわかりません。助けていただければ幸いです!

よし、コンストラクタでカードクラスを取得した(不要な属性は省いた)

public class Card 
{
    String name;
    String cardID;
    int strFire;
    int strEarth;

    public Card(String n, String id, int fire, int earth)
    {
        name = n;
        cardID = id;
        strFire = fire;
        strEarth = earth;
    }
}

次に、すべてのカードのインスタンスを作成する必要がある Deck クラスを取得します。

public class Deck 
{
    static void createDeck()
    {
        Card hoax06 = new Card("Nirwadas the Traveler", "hoax06", 3, 2);
        System.out.println(hoax06.name); // this works
    }
}

最後に、メインを保持する Game クラスを取得しました。

public class Game 
{
    public static void main(String[] args) 
    {
        Deck.createDeck();
        System.out.println(hoax06.name); // hoax06 cannot be resolved to a variable
    }
}

答えはおそらく非常に単純ですが、Java のアクセス システムは依然として私を混乱させます。私も同様のエラーについてフォーラムを参照しましたが、それらを私のケースに適用することができませんでした. メイン内からカードを参照するにはどうすればよいですか?

4

4 に答える 4

2

カード インスタンスは Deck クラスで作成されるため、Game クラスはそれを直接認識しません。また、createDeck() メソッドが終了するとすぐに、カードへの参照が失われ、インスタンスがなくなります。

簡単な例を次に示します。

public class Deck 
{
    public Card hoax06;

    static Deck createDeck()
    {
        Deck deck = new Deck();
        deck.hoax06 = new Card("Nirwadas the Traveler", "hoax06", 3, 2);
        return deck;
    }
}

public class Game 
{
    public static void main(String[] args) 
    {
        Deck deck = Deck.createDeck();
        System.out.println(deck.hoax06.name); // this is where the error occurs
    }
}
于 2013-02-09T13:56:17.523 に答える
1

これを試して:

public class Deck 
{
    static Card createDeck()
    {
        Card hoax06 = new Card("Nirwadas the Traveler", "hoax06", 3, 2);
        System.out.println(hoax06.name); // this works
        return hoax06;    //return the object
    }
    }
public class Game 
{
    public static void main(String[] args) 
    {
        Card c=Deck.createDeck();  //get the object
        System.out.println(c.name); // use it here
    }
}
于 2013-02-09T13:58:28.553 に答える
1

あなたは作ったことがないhoax06。そのため、エラーが発生しています。

Deck.createDeck();
System.out.println(hoax06.name);

以下にいくつかのオプションを示します。

  1. カードをcreateDeck()返してもらう
  2. で静的Cardを作成してDeck、使用できるようにしますDeck.hoax06.name
于 2013-02-09T13:55:16.403 に答える
0

列挙型 (おそらく Cards と呼ばれる) を作成し、すべてのカードを一覧表示してから、Cards.HOAX06.name を使用して Game クラス内 (または他の場所) からそれらにアクセスできます。

たとえば、次のようなものです。

    enum Cards {
        HOAX06("Nirwadas the Traveler", 3, 2),
        HOAX07("Something else", 5, 2) 
        //list all your cards here in the same way
        ;

        String name;
        int strFire;
        int strEarth;

        Cards(String name, int fire, int earth){
           this.name = name;
           this.strFire = fire;
           this.strEarth = earth;
        }
    }

次に、別のクラスから呼び出すには:

public static void main(String[] args) {     
     System.out.println(Cards.HOAX06.name);
     System.out.println(Cards.HOAX07.strEarth);
     System.out.println(Cards.HOAX06.strFire);
     }

すべての Enum はデフォルトで静的かつ最終的なものであり、作成後に値を変更することはできませんが、カードのデッキではおそらく変更したくないと思います..

于 2013-02-09T14:07:43.840 に答える