Как сделать (что эффективно) указатель в Java - PullRequest
0 голосов
/ 16 марта 2020

Я знаю, что в Java нет типов указателей, но у меня есть массив объектов, и мне нужно что-то, чтобы работать как указатель на первый элемент массива, независимо от того, что это или сколько раз остроумные изменения. Это для игры Pokemon, над которой я работаю, и в классе Player у меня есть

public class Player {

    public String name;
    public Pokemon[] party;
    public static Pokemon currentPokemon;

    public Player(){
        this.party = new Pokemon[6];
        currentPokemon = party[0];
    }
}

Мне нужен currentPokemon, чтобы всегда "указывать" на вечеринку [0], поэтому я решил сделать это stati c, но когда я позже добавлю покемона в массив, party [0] содержит Pokemon, но currentPokemon будет нулевым. Как мне получить это поведение, похожее на указатель?

Ответы [ 2 ]

3 голосов
/ 16 марта 2020

static члены относятся к классу и являются общими для всех экземпляров. Каждый раз, когда вы создаете новый экземпляр, вы переопределяете значение currentPokemon (в конструкторе). Удалите модификатор static, и вы должны быть в порядке:

public class Player {

    public String name;
    public Pokemon[] party;
    public Pokemon currentPokemon; // Here

РЕДАКТИРОВАТЬ: С последним комментарием Кристиана Кука, я думаю, теперь я понимаю формулировку проблемы. currentPokemon инициализируется в конструкторе с party[0], что, конечно, null, потому что party был только что создан в предыдущей строке. В отличие от указателя в c (++), currentPokemon не будет обновляться, когда party обновляется - это не указатель, это просто ссылка на значение, которое party[0] имел при инициализации.

Самый простой способ получить искомое поведение - не хранить currentPokemon как член, но вместо этого есть метод для его извлечения:

public Pokemon getCurrentPokemon() {
    return party[0];
}
0 голосов
/ 16 марта 2020

Вы можете указать на такие массивы, как этот

Pokemon[] currentPokemon=party

Теперь party и currentPokemon указывают на один и тот же массив объектов. Манипулирование currentPokemon приводит к манипулированию партией.

Надеюсь, это немного поможет. :)

...