#java #mutable
Вопрос:
**Initializing an array of NaturalNumbers with values 1 through 4**
Когда я отлаживаю, я нахожу массив = [5,5,5,5], и моя цель состоит в том, что массив = [1,2,3,4].
NaturalNumber[] array = new NaturalNumber[4];
NaturalNumber count = new NaturalNumber2(1);
for (int i = 0; i < array.length; i ) {
array[i] = count;
count.increment();
Вот ссылка на все методы, которые можно использовать с натуральными числами. Я просто не понимаю, как я могу создать нужный массив, не изменив count
его значение.
Комментарии:
1. Вам абсолютно неизбежно придется сделать копии ценности.
2. Вы должны создать объект в цикле for, а не снаружи.
Ответ №1:
NaturalNumber[] array = new NaturalNumber[4];
NaturalNumber count = new NaturalNumber2(0);
for (int i = 0; i < array.length; i ) {
count = new NaturalNumber2(i);
count.increment();
array[i] = count;
Ответ №2:
**Initializing an array of NaturalNumbers with values 1 through 4**
Вы можете сделать это и таким образом
int[] numbers = IntStream.range(1, 5).toArray();
Ответ №3:
У вас получилось 5,5,5,5, потому что вы используете упакованный непримитивный тип вместо примитива.
Таким образом, ссылки-это ссылки NaturalNumber count
на местоположение объекта. Когда вы помещаете это count
в массив, вы помещаете ссылку (четыре копии), и она содержит последнее значение. Поскольку вы делаете приращение как самое последнее в последнем цикле, оно указывает на значение 5 (но не является значением 5).
Если бы вы объявили int count
вместо этого и использовали count
, так как вы не можете вызвать .increment ()
примитив, то вы получили бы последовательность 1, 2, 3, 4. Механизм времени выполнения будет каждый раз помещать фактическое значение count в массив.