Java 无法将卡解析为变量

Java 无法将卡解析为变量,java,Java,我在做一个私人项目。这将是一个纸牌游戏,你可以比较,例如口袋妖怪。不幸的是,我遇到了一个错误,我无法找出它的原因。我将感谢任何帮助 好的,我有一个带有构造函数的card类(我省略了不必要的属性) public class Card { String name; String cardID; int strFire; int strEarth; public Card(String n, String id, int fire, int earth)

我在做一个私人项目。这将是一个纸牌游戏,你可以比较,例如口袋妖怪。不幸的是,我遇到了一个错误,我无法找出它的原因。我将感谢任何帮助

好的,我有一个带有构造函数的card类(我省略了不必要的属性)

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
    }
}
最后,我有一个游戏类,它包含了main

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

我知道答案可能很简单,但java的访问系统仍然让我感到困惑。我也浏览过论坛上类似的错误,但无法将它们应用到我的案例中。我应该如何从main中引用卡片?

您从未制作过
hoax06
。这就是错误发生的原因

Deck.createDeck();
System.out.println(hoax06.name);
以下是一些选项:

  • 制作
    createDeck()
    返回卡
  • Deck
    中制作一张静态
    ,这样您就可以使用
    Deck.hoax06.name

  • 您从未做过
    hoax06
    。这就是错误发生的原因

    Deck.createDeck();
    System.out.println(hoax06.name);
    
    以下是一些选项:

  • 制作
    createDeck()
    返回卡
  • Deck
    中制作一张静态
    ,这样您就可以使用
    Deck.hoax06.name

  • 卡片实例是在甲板类中创建的,因此游戏类不直接知道它。另外,只要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
        }
    }
    

    卡片实例是在甲板类中创建的,因此游戏类不直接知道它。另外,只要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
        }
    }
    
    试试这个:

    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
        }
    }
    
    试试这个:

    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
        }
    }
    
    您可以创建一个枚举(可能称为卡片),列出您的所有卡片,然后使用Cards.HOAX06.name从游戏类内部(或任何其他地方)访问它们

    例如,类似这样的事情:

        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);
         }
    
    所有枚举都是静态的和最终的。默认情况下,一旦创建了值,您就无法更改这些值,但我猜对于一副牌,您可能不想更改它们。

    您可以创建一个枚举(可能称为牌),列出您的所有牌,然后使用cards.HOAX06.name从游戏类内部(或任何其他地方)访问它们

    例如,类似这样的事情:

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

    所有枚举都是静态的和最终的。默认情况下,一旦创建了值,就无法更改它们,但是我猜,对于一副牌,你可能不想..

    一个错误
    如果你不告诉我们什么错误,你希望我们如何帮助你?@doorknold:标题说:
    无法解析为变量
    很明显你有错误,因为你在牌堆类中创建了hoax06,并在游戏类中访问它!!!你从哪里得到错误?@duffy356:是他写的
    //这就是错误发生的地方
    一个错误
    如果你不告诉我们什么错误,你希望我们如何帮助?@Doorknob:标题说:
    无法解析为变量
    很明显你有错误,因为你正在甲板类中创建hoax06,并在游戏类中访问它!!!你从哪里得到错误?@duffy356:是他写的
    //这就是错误发生的地方
    虽然这毫无疑问是可行的,但如果有人希望createDeck()函数总是返回一张且仅返回一张卡,我会感到惊讶。。这不会非常有用。这是OP实现而不是我的。虽然这无疑会起作用,但如果有人希望createDeck()函数总是返回一张且仅返回一张卡,我会感到惊讶。。不会太有用的。这是OP实现,不是我的。谢谢!我想我现在明白了。我没有制作一个实际的甲板实例,所以尽管它是静态的,但卡没有存储在任何地方。这应该行得通。再次感谢!非常感谢。我想我现在明白了。我没有制作一个实际的甲板实例,所以尽管它是静态的,但卡没有存储在任何地方。这应该行得通。再次感谢!