Вызвать нестатическую переменную, чтобы ее мог использовать другой класс (не может быть создан) - PullRequest
1 голос
/ 30 марта 2012

У меня проблема

У меня есть несколько классов объектов, они называются "кошка", "собака" и т. Д.

В этих классах я назначил каждому объекту кошки и собаки свой собственный уровень целочисленной энергии (поэтому, когда они «движутся» через двумерный массив, они теряют и получают энергию). Я ссылаюсь на это, говоря this.energylevel.

Поскольку «уровень энергии» специфичен для каждого объекта, я не могу сделать его статичным. как я могу позволить "классу собаки" видеть уровень энергии объектов кошки, который хранится не статически в "классе кошки"?

и я не могу создать экземпляр Cat c = new Cat(); в классе собаки, это уже сделано в методе main.

Это все часть масштабного проекта, так что прости меня, если я не объяснил это достаточно ясно

1 Ответ

0 голосов
/ 30 марта 2012

Вы можете добавить статический метод внутри объекта Cat, который будет возвращать нестатическую переменную на основе идентификатора Cat. Вам нужно будет хранить список Cats на статической карте внутри объекта Cat.

private static HashMap<String,Cat> cats = new HashMap<String,Cat>();
...
public static int getEnergy(String catId) {
    Cat myCat = cats.get(catId);
    return myCat.getEnergy();
}

public int getEnergy() {
    return this.energy()
}

В качестве альтернативы, если вы хотите выполнить поиск по X, Y:

private static ArrayList<Cat> cats = new ArrayList<Cat>();

private int energy = 100;
private int x = 0;
private int y = 0;
...
public static int getEnergy(int x, int y) {
    //Energy of -1 being the error (not found) state.
    int energy = -1;
    for(Cat cat : cats) {
        if(cat.getX() == x && cat.getY() == y) {
            energy = cat.getEnergy();
        }
    }
    return energy;
}

public int getEnergy() {
    return this.energy()
}

public int getX() {
    return this.x;
}

public int getY() {
    return this.y;
}
...