#java #arrays #oop #methods
#java #массивы #ооп #методы
Вопрос:
В настоящее время я заполняю раздел кода, и в нем один из методов, который я должен сделать, чтобы новый массив удвоил размер и заполнил его старыми значениями, что я и сделал, но как мне сделать так, чтобы новый массив использовался с этого момента, еслиметод ничего не возвращает?
private void upSize()
{
String[] biggerArr = new String[theArray.length*2];
for( int i = 0; i < theArray.length; i )
biggerArr[i] = theArray[i];
}
Очевидно, что этот код создан для того, чтобы ничего не возвращать, но когда он вызывается где-то, как здесь, как мне на самом деле увеличить размер этого массива, чтобы он мог вместить новый «добавленный» элемент.
public boolean add( T element ){
if (size() == theArray.length) upSize();
theArray[count ] = element;
return true;
}
Извините, если это было что-то, на что уже был дан ответ, я много искал и не смог найти ничего, что касалось бы этого конкретно.
Комментарии:
1.
biggerArr
является локальной переменной. Что вы ожидаете, что это изменит?2. Кстати:
Arrays.copyOf(theArray, theArray.length * 2)
вернет массив в два раза большей длины.3.Просто добавьте
theArray = biggerArr;
в конецupSize()
, чтобыtheArray
поле обновлялось новым массивом большего размера.4. Я здесь новичок, поэтому я точно не знаю, могу ли я / как реагировать на людей, но Энди Тернер, это была моя проблема. Обычно я бы просто вернул его, но я не могу его вернуть, но спасибо за совет Arrays.copyOf. Кроме того, Андреас, я считаю, что это именно то, что я искал, спасибо.
Ответ №1:
Вы должны вернуть новый массив и назначить его существующей ссылке, например:
private String[] upSize()
{
String[] biggerArr = new String[theArray.length*2];
for( int i = 0; i < theArray.length; i )
biggerArr[i] = theArray[i];
return biggerArr;
}
public boolean add( T element ){
if (size() == theArray.length) theArray = upSize();
theArray[count ] = element;
return true;
}
Но посмотрите java.util.ArrayList
, вам не придется изобретать велосипед 🙂
Комментарии:
1. Нет необходимости возвращать массив, было бы достаточно просто выполнить это назначение после заполнения нового массива. И обратите внимание, что ваш второй метод все время возвращает true , это абсолютно бессмысленно.
2. Правильно, было бы достаточно переназначить
theArray = biggerArr;
в концеupSize
метода. Во втором методе уже былreturn true
оператор, поэтому это была не моя идея поместить его туда.3. Ничто не мешает front сообщить спрашивающему, какие еще вещи в его коде можно улучшить.