JAVA:如果我有一个包含数组的类,我将如何在main方法中访问该数组?

时间:2016-09-21 21:45:03

标签: java arrays class

我正在用java创建我的第一个游戏,我想让事情井然有序,但我无法弄清楚如何访问我的数组以便在我的main方法中使用,这将运行游戏。

这是我的数组代码。

package game;

public class Monsters {

    public static void createMonsterList(String[] args) {

        monsterTemplate[] monsterList = new monsterTemplate[9];
        {
            monsterList[0] = new monsterTemplate("Ghoul", 10, 40, 15);
            monsterList[1] = new monsterTemplate("Gremlin", 7, 15, 5);
            monsterList[2] = new monsterTemplate("Grue", 15, 100, 30);
            monsterList[3] = new monsterTemplate("Py", 10, 20, 10);
            monsterList[4] = new monsterTemplate("Skeleton", 8, 25, 8);
            monsterList[5] = new monsterTemplate("Zombie", 5, 40, 10);
            monsterList[6] = new monsterTemplate("Goblin", 5, 10, 2);
            monsterList[7] = new monsterTemplate("Troll", 20, 250, 50);
            monsterList[8] = new monsterTemplate("Slime", 4, 10, 1);
        }
    }
}

基本上我在制作这个类文件后不知道如何使用它。我希望能够获得一个怪物并使用我在数组中的数据。我确实在monsterTemplate类中有getter。

如果有任何人需要帮助我的信息,我可以提供。

4 个答案:

答案 0 :(得分:0)

您的类的实例变量不是在静态方法中创建的,您可以在构造函数之前声明这些变量,在创建Monsters对象的新实例时将始终调用它们(在这种情况下,方法public Monsters是您的构造函数)。

如果你做了类似下面的事情,你可以看到当你创建一个新的Monster对象时,你现在可以访问(并修改)你的数组。

package game;

public class Monsters {

   private monsterTemplate[] monsterList = new monsterTemplate[9];

   public Monsters(){
       initMonsters();
   }

   private void initMonsters(){
      monsterList[0] = new monsterTemplate("Ghoul", 10, 40, 15);
      monsterList[1] = new monsterTemplate("Gremlin", 7, 15, 5);
      monsterList[2] = new monsterTemplate("Grue", 15, 100, 30);
      monsterList[3] = new monsterTemplate("Py", 10, 20, 10);
      monsterList[4] = new monsterTemplate("Skeleton", 8, 25, 8);
      monsterList[5] = new monsterTemplate("Zombie", 5, 40, 10);
      monsterList[6] = new monsterTemplate("Goblin", 5, 10, 2);
      monsterList[7] = new monsterTemplate("Troll", 20, 250, 50);
      monsterList[8] = new monsterTemplate("Slime", 4, 10, 1);
   }

   public monsterTemplate[] getMonsters(){
       return monsterList;
   }

   // An example of how this class would be used.
   public static void main(String[] args) {
       Monsters monsters = new Monsters();
   }
}

答案 1 :(得分:0)

monsterListcreateMonsterList的局部变量。要从Monsters中的其他方法访问它,您应该将其作为类字段提取。

关于变量life-cycle and scopes的帖子很好。我建议阅读它。

简短的例子:

class A {
    public void method() {
        // int b = a; <- illegal before a is defined
        // a is visible only within this method after declaration
        int a;
    }
    // a is not defined here
 }

class B {
    // b is a class field you can access b from any instance of B
    public int b;

    public int method() {
        return b;
    }
}
new B().b // <- access b in instance

class C {
    // c is a static field it is accessible even without class instance
    static int c;
    static int getC() {
        return c;
    }

    int getCNonStatic() {
        return c;
    }
}
C.c  // <- access field by class name

答案 2 :(得分:0)

静态变量只能由静态函数访问。因此,您可以创建函数static,然后在将变量转换为实例变量后访问该变量;在你的例子中它是本地的。

除了最简单的应用程序之外,Java开发人员通常不会在Main方法中编写太多代码。

查看SpringBoot,它将帮助您编写结构良好的应用程序。然后,您可以通过@Value变量注入数组或使用@Autowired方法进行设置。 SB将为您提供创建下一个优秀Web应用程序的途径。

答案 3 :(得分:0)

在您的示例中,由于您正在使用数组,因此看起来您的怪物集是固定的。在创建固定集时,我更喜欢使用enum api这样的:

public enum Monster {

      GHOUL("Ghoul", 10, 40, 15),
      GREMLIN("Gremlin", 7, 15, 5);
      GRUE("Grue", 15, 100, 30);
      PY("Py", 10, 20, 10);
      SKELETON("Skeleton", 8, 25, 8);
      ZOMBIE("Zombie", 5, 40, 10);
      GOBLIN("Goblin", 5, 10, 2);
      TROLL("Troll", 20, 250, 50);
      SLIME("Slime", 4, 10, 1);

   private String name;

   private int a;
   private int b;
   private int c;

   private Monster(String name, int a, int b, int c){
       this.name = name;
       this.a = a;
       this.b = b;
       this.c = c;
   }

}

public class MyMainClass {

   public static void main() {

       Monster currentMonster = Monster.GOBLIN;
       Monster[] monsters = Monster.values();
   }
}

但是你可能想要动态创建怪物,我更喜欢List或Map,而不是数组,因为你可以在需要时动态地将更多的怪物添加到你的列表中。

public class Monster {

       private String name;

       private int a;
       private int b;
       private int c;

       public Monster(String name, int a, int b, int c){
           this.name = name;
           this.a = a;
           this.b = b;
           this.c = c;
       }
}



public class MyMainClass {

       private Map<String,Monster> monsters = new HashMap<>();

       private Monster ghoul = new Monster("Ghoul", 10, 40, 15);
       private Monster gremlin = new Monster("Gremlin", 7, 15, 5)
       private Monster grue = new Monster("Grue", 15, 100, 30);
       private Monster py = new Monster("Py", 10, 20, 10);
       private Monster skeleton = new Monster("Skeleton", 8, 25, 8);
       private Monster zombie = new Monster("Zombie", 5, 40, 10);
       private Monster goblin = new Monster("Goblin", 5, 10, 2);
       private Monster troll = new Monster("Troll", 20, 250, 50);
       private Monster slime = new Monster("Slime", 4, 10, 1);

       public void init() {

              monsters.put(ghoul.getName(), ghoul);
              monsters.put(gremlin.getName(), gremlin);
              monsters.put(grue.getName(), grue);
              monsters.put(py.getName(), py);
              monsters.put(skeleton.getName(), skeleton);
              monsters.put(zombie.getName(), zombie);
              monsters.put(goblin.getName(), goblin);
              monsters.put(troll.getName(), troll);
              monsters.put(slime.getName(), slime);
        }

        public static void main() {

              init();
              Monster currentMonster = monsters.get("Ghoul");
              Collection<Monster> monsters = monsters.values();
              monsters.put("New monster", new Monster("New monster",1,2,3));
        }
}

你似乎没什么经验,我建议先做一些教程。接下来java有一些编码标准,如camelcasing等,这对学习非常有用,并且会使你的代码更具可读性。