我正在用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。
如果有任何人需要帮助我的信息,我可以提供。
答案 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)
monsterList
是createMonsterList
的局部变量。要从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等,这对学习非常有用,并且会使你的代码更具可读性。