Как я могу использовать 1 массив с 2 различными размерами, используя наследование и конструкторы - PullRequest
2 голосов
/ 23 марта 2019

Мне нужно использовать один массив для отслеживания результатов игры, где индексами являются уровни игры.В родительском классе игроку разрешено 10 уровней.В дочернем классе им дается 40 дополнительных уровней на общую сумму 50.

Эта глава посвящена наследованию, и они также охватывают конструкторы.Может ли конструктор как в родительском, так и в дочернем классах изменить размер одного массива?

Я пытался объявить массив размером до 50, а затем в каждом конструкторе выделять память под нужный мне размер.[10] и [50] для родительского и дочернего классов соответственно.

Ответы [ 3 ]

0 голосов
/ 23 марта 2019

Да, в конструкторе вы можете просто переопределить его следующим образом: array = new int[#]

Также, возможно, нет точного ответа на ваш вопрос, но вы можете использовать List вместо массива.Списки Java сделаны, чтобы быть изменяемого размера.

Таким образом, вместо int[] вы можете определить его как List<Integer>, и вам даже не придется беспокоиться о размере.

0 голосов
/ 23 марта 2019

Самый низкий уровень в вашей иерархии должен давать подклассам возможность определять размер массива.

Например:

package io.medev.stackoverflow;

public class Game1 {

    private final int[] levels;

    public Game1() {
        this(0);
    }

    protected Game1(int additionalLevels) {
        this.levels = new int[10 + additionalLevels];
    }
}

И подкласс:

package io.medev.stackoverflow;

public class Game2 extends Game1 {

    public Game2() {
        this(0);
    }

    protected Game2(int additionalLevels) {
        super(40 + additionalLevels);
    }
}

Как и другие уже упомянутые, я бы в общем случае рекомендовал использовать List вместо массивов.

0 голосов
/ 23 марта 2019

В Java массивы не расширяются, поэтому вы не можете просто «использовать 1 массив с 2 различными размерами». Вы, вероятно, хотите использовать ArrayList:

List<Integer> list = new ArrayList<>();

Есть также вопрос: вы уверены, что вам нужно наследование для этой задачи? Вы можете просто создать массив нужного размера:

List<Integer> list = new ArrayList<>(40);

Но даже в этом нет необходимости. Список будет увеличиваться по мере необходимости, если не останется свободного места, поэтому вам не следует об этом заботиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...